0

可能重复:
Ruby on Rails:如何让多个提交按钮转到不同的方法(可能使用 with_action?)

在一个表单中我有一些 submit_tags 并且在服务器端我必须检测哪个被点击了。这是我尝试过的,但不起作用:在服务器端,我只在参数中获得一个动作名称:

<%= form_tag controller_action_path(:id => @project.id), :method => :post do %>
    <% if @project_is_synced %>
        <%= submit_tag 'Update synchronization', :name => 'update' %>
        <%= submit_tag 'Stop synchronization', :name => 'stop' %>
    <% else %>
        <%= submit_tag 'Start synchronization', :name => 'start' %>
    <% end %>
<% end %>

我只有params[:action]一个始终相同的当前动作名称

4

1 回答 1

1

调试它的最简单方法是在本地运行它并查看通过的参数,或在您的操作中记录参数:

 if request.post?
    logger.warn "POST #{params}"

 end

您已经命名了 submit_tags,因此每个按钮都有不同的名称,而不是默认名称“commit”,并且您必须检查名为“start”、“stop”或“update”的参数。

最简单的只是删除名称并检查 params[:commit] 的变化值,但是如果您不想更改视图,请使用它(显然替换渲染代码):

  if params[:start]
    render :text => "start"
  elsif params[:update]
    render :text => "update"
  else
    render :text => "stop"
  end

链接帖子中对答案的评论确实解决了这个问题,但我明白你为什么错过它。

于 2012-10-16T20:27:06.857 回答