我的问题控制器中有一个动作vote_for。
帮助我从视图中调用此操作的助手是什么? 我试过了:
vote_for_question_path(@question)
但这不起作用。 ?
答案 0 :(得分:1)
由于您已经为Question
资源定义了资源丰富的路由,因此您应首先在现有资源路由上添加member route:
# config/routes.rb
resources :questions do
member do
get 'vote_for'
end
end
这将创建以下路线:
vote_for_question GET /questions/:id/vote_for(.:format) questions#vote_for
接下来,为结果路线创建一个控制器动作:
# app/controllers/questions_controller.rb
def vote_for
# logic goes here
end
最后,在您的视图中,您可以通过将集合路径传递给link_to
帮助程序来构建指向路径的链接:
<%= link_to "Vote", vote_for_question_path(@question) %>
<强>更新强>:
如果您将链接表示为HTML按钮而不是<a>
标记(正如OP在此答案的评论中提出的那样),您可以使用button_to
form helper如下:
<%= button_to "Vote", vote_for_question_path(@question), method: "get" %>
请注意,由于您要使用按钮替换链接,因此应确保将正确的HTTP提交方法(在此实例中为GET
)作为参数传递。
答案 1 :(得分:0)
只有在routes.rb
中将路径助手定义为命名路径时才会出现路径助手。因此,如果您想要一个命名的非RESTful路由(您这样做),您应该添加到您的路由文件:
get 'vote_for_question/:id', to: 'question#vote_for', as: 'vote_for_question'
然后你可以在你的观点中调用vote_for_question_path(@question.id)
,它会生成例如/vote_for_question/1
。
有关详情,请参阅http://guides.rubyonrails.org/routing.html#generating-paths-and-urls-from-code。