Rails: remote_form_ для не приятной игры с несколькими submit_tags - PullRequest
6 голосов
/ 24 апреля 2010

У меня есть форма со следующим:

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

Я ожидаю, что представленные параметры будут отражать, какая кнопка была нажата. Однако независимо от того, какую кнопку я нажимаю, представленные параметры включают "commit"=>"Foo".

Что я делаю не так?

Ответы [ 4 ]

5 голосов
/ 24 апреля 2010

form_remote_tag генерирует некоторый Javascript, который использует метод Form.serialize Prototype для отправки значений ваших полей формы на сервер. 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();" %>
1 голос
/ 25 марта 2011

Попробуйте это

View

<% 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
1 голос
/ 24 апреля 2010

Вместо использования одной формы с двумя тегами отправки вы можете использовать 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 .

0 голосов
/ 12 мая 2010

ИМХО это очиститель от прикосновения ...

<%= hidden_field_tag "real_commit", "" %>               
<%= f.submit "Foo", :OnClick => "$('#real_commit')[0].value='Foo'" %>
<%= f.submit "Bar", :OnClick => "$('#real_commit')[0].value='Bar'" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...