检测多个submit_tag在Rails中单击

时间:2012-10-16 18:41:11

标签: ruby-on-rails ruby submit

  

可能重复:
  Ruby on Rails: How to have multiple submit buttons going to different methods (maybe with with_action?)

在表单中,我有一些submit_tags,在服务器端,我必须检测哪一个被点击。 这是我尝试过,而不是工作:在服务器端我只在params中获得一个动作名称:

<%= 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],其当前操作名称始终相同

1 个答案:

答案 0 :(得分:1)

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

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

 end

你已经命名了submit_tags,所以不是默认名称'commit',每个按钮都有不同的名称,你必须检查名为'start','stop'或'update'的params。

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

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

链接帖子中对答案的评论确实涉及到这一点,但我明白为什么你错过了它。