Это возможно с помощью JavaScript. В представлении вы можете использовать атрибут name
или атрибут данных html5, как я делаю ниже. Основная идея заключается в том, что необходимо хранить где-то URL для правильного действия формы.
<% form_tag(:id=>'run_report', :name => 'run_report') do %>
<%= submit_tag 'Run', :name => "submit", :data-action => "#{url_for(action1)}", :class => "submit_btn" %>
<%= submit_tag 'Generate', :name => "generate", :data-action => "#{url_for(action2)}", :class => "submit_btn" %>
<% end %>
Простой скрипт JQuery (должен работать, но не тестировался):
var $form = $('#run_report);
$('#run_report :submit').click(function() {
$form.attr('action', $(this).attr('data-action')).addClass('ready').submit();
});
$form.submit(function(e){
if(!$form.hasClass('ready')) {
e.preventDefault();
});
Хитрость в том, что хотя форма не имеет класса ready
, она не будет отправлена. И вы добавляете этот класс после установки правильного действия формы.
Это работает для меня, когда я инициализирую скрытые поля формы со значениями в зависимости от того, какая кнопка была нажата, но с тем же действием формы. Хотя подход в вашем случае может быть таким же. Надеюсь, что это направление поможет вам.