Rails:remote_form_for与多个submit_tags不能很好地协作

时间:2010-04-23 21:54:05

标签: ruby-on-rails ajax

我有一张包含以下内容的表格:

<% form_remote_tag :url => {:action => :wotsit} do %>
  <%= submit_tag "Foo" %>
  <%= submit_tag "Bah" %>
<% end %>

我希望提交的参数能反映出哪个按钮被点击了。但是,无论我点击哪个按钮,提交的参数都包含"commit"=>"Foo"

我做错了什么?

4 个答案:

答案 0 :(得分:5)

form_remote_tag生成一些Javascript,它使用Prototype的Form.serialize方法将表单字段的值发送到服务器。 Form.serialize总是使用名为“commit”的第一个元素,所以它总是“Foo”。

作为一种解决方法,你可以添加一个隐藏的字段&amp;将您的提交标记设置为该字段&amp;提交表格:

<%= hidden_field_tag "real_commit", "" %>
<%= button_to_function "Foo", "$('real_commit').value='Foo';$('myform').submit();" %>
<%= button_to_function "Bah", "$('real_commit').value='Bah';$('myform').submit();" %>

答案 1 :(得分:1)

您可以使用2x button_to_remote或2x link_to_remote来代替使用包含两个提交代码的表单:

<%= button_to_remote "Foo", :url => { :action => :wotsit } %>
<%= button_to_remote "Bah", :url => { :action => :wotsit } %>

我认为button_to_remote发送“Foo”或“Bah”。 link_to_remote肯定会。但是,您可以使用:with选项发送任何内容作为参数。

检查PrototypeHelper documentation

答案 2 :(得分:1)

试试这个

视图

<% form_remote_tag(:url => {:controller => "test", :action => "test_123"},:html => {:id => "form_test"}) do %>

   <%= hidden_field_tag "submit" %>
   <%= submit_tag "Restore", :id => 'restore',  :value => "", :onclick => "$('download').disabled = true;$('delete').disabled = true;$('submit').value='restore';" %>
   <%= submit_tag "Download", :id => 'download',  :value => "", :onclick => "$('restore').disabled = true;$('delete').disabled = true;$('submit').value='download';" %>
   <%= submit_tag "Delete", :id => 'delete',  :value => "", :onclick => "$('restore').disabled = true;$('download').disabled = true;$('submit').value='delete';" %>

<% end %>

控制器

 def test_123
    case params[:submit]
    when "restore"
    when "download"
    when "delete"
    end
  end

答案 3 :(得分:0)

恕我直言,这是一个触摸清洁工......

<%= hidden_field_tag "real_commit", "" %>               
<%= f.submit "Foo", :OnClick => "$('#real_commit')[0].value='Foo'" %>
<%= f.submit "Bar", :OnClick => "$('#real_commit')[0].value='Bar'" %>