У меня есть форма со следующим:
<% form_remote_tag :url => {:action => :wotsit} do %>
<%= submit_tag "Foo" %>
<%= submit_tag "Bah" %>
<% end %>
Я ожидал бы, что отправленные параметры отразятся, какая кнопка была нажата. Однако, неважно, который кнопка я нажимаю, отправленные параметры включают "commit"=>"Foo"
.
Что я делаю неправильно?
form_remote_tag генерирует некоторый Javascript, который использует метод Prototype Form.serialize для отправки значений полей вашей формы на сервер. Form.serialize - это всегда используется первый элемент с именем «commit», поэтому всегда «Foo».
В качестве временного решения вы можете добавить скрытое поле, настроить его в тегах отправки и отправить форму:
<%= 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();" %>
Вместо использования одной формы с двумя тегами отправки вы можете использовать либо 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 "или" Ба "вместе. link_to_remote
определенно делает не . Но тогда вы можете использовать опцию : with
для отправки чего-либо в качестве параметра.
Для этого обратитесь к документации PrototypeHelper .
ИМХО, это очиститель сенсорного экрана ...
<%= hidden_field_tag "real_commit", "" %>
<%= f.submit "Foo", :OnClick => "$('#real_commit')[0].value='Foo'" %>
<%= f.submit "Bar", :OnClick => "$('#real_commit')[0].value='Bar'" %>