在表单标记中调用特定操作

时间:2014-02-13 00:59:38

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我的问题控制器中有一个动作vote_for。

帮助我从视图中调用此操作的助手是什么? 我试过了:

vote_for_question_path(@question)

但这不起作用。 ?

2 个答案:

答案 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