2011-05-02 45 views
0

当试图访问的原因索引页NameError - 未定义的局部变量或控制器调用创建方法时方法

NameError in Reasons#index 

Showing /home/alec/workspace/rails/nwis/app/views/reasons/index.html.erb where line #26 raised: 

undefined local variable or method `upvote_reason' for #<#<Class:0x000000023d9940>:0x000000023d3298> 
Extracted source (around line #26): 

23:  <td><%= link_to 'Show', reason %></td> 
24:  <td><%= link_to 'Edit', edit_reason_path(reason) %></td> 
25:  <td><%= link_to 'Destroy', reason, :confirm => 'Are you sure?', :method => :delete %></td> 
26: <td><%= link_to "Vote up", :action => upvote_reason, :id => reason.id %></td> 
27: </tr> 
28: <% end %> 
29: </table> 
Rails.root: /home/alec/workspace/rails/nwis 

Application Trace | Framework Trace | Full Trace 
app/views/reasons/index.html.erb:26:in `block in _app_views_reasons_index_html_erb__2084449067598068298_18776480__4598497200926455905' 
app/views/reasons/index.html.erb:16:in `each' 
app/views/reasons/index.html.erb:16:in `_app_views_reasons_index_html_erb__2084449067598068298_18776480__4598497200926455905' 
app/controllers/reasons_controller.rb:7:in `index' 

视图中的行:

<td><%= link_to "Vote up", :action => upvote_reason, :id => reason.id %></td> 

在控制器的方法:

def upvote_reason 
    @reason = Reason.find(params[:id]) 
    @reason.upvote += 1 
    @reason.save 
    redirect_to reason_path 
end 

不可否认,我是Rails的新手,但我觉得我很快就会点击一次我可以弄清楚如何正确地与控制器交互。如果有人能够正确地指出一个涵盖这个主题的教程,我很乐意检查一下这个问题是否过于基本。

回答

3

把冒号它把之前它变成一个符号,或者把它周围的报价:

:action => :upvote_reason 

:action => "upvote_reason" 

此外,你需要更新你的路由。尽管你现在可能只是有resources :reasons,你会想是这样的:

resources :reasons do 
    get "upvote_reason", :on => :member 
end 

事实上,加入这条航线后,你可以使用,而不是你:action:id PARAMS命名的路线:

<%= link_to "Vote up", upvote_reason_reason_path(reason) %> 

(如果你只是重命名upvote_reason行动upvote,那么这将成为upvote_reason_path(reason)

+0

谢谢!然而,这导致了路由错误:'没有路由匹配{:action =>“upvote_reason”,:id => 1,:controller =>“原因”}' - 我认为使用link_to会自动生成一个链接适当的控制器方法和给定的ID参数? – Alec 2011-05-02 03:44:08

+0

请参阅我的编辑re:your routes.rb文件。 – 2011-05-02 03:50:10

相关问题