简体   繁体   中英

Have a form submit to two possible different controllers

I have the following form on a site

<% form_tag({ :action => :subid}, :id=>'run_report', :name => 'run_report') do %>
 Beginning Date <%=  date_select("post", "start_date", :start_year => 2010,:order =>    [:month, :day, :year]) %><br />
 End Date <%=  date_select("post", "end_date", :start_year => 2010,:order => [:month, :day, :year]) %><br />
 <%= submit_tag 'Run', :name => "submit", :class => "submit_btn" %>
<% end %>

I want to add another button called Generate that is passed the same variables (start_date and end_date) as the form below but calls the action generate instead of run. Ideally I'd like to do this without having to have two duplicate forms.

Any help is appreciated.

or you may bind your button onclick action Something like

$("#your_button_id").click(function() {
  $.post("second_url", $("#your_form_id").serialize());
  return true;
});

It's possible with a javascript. In the view you can use name attribute or html5 data-attribute as I do below. The main idea is that it's necessary to store somewhere url to proper form action.

<% 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 %>

Simple JQuery script (should work but not tested):

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();
});

The trick is that while form has not class ready , it won't be submitted. And you add this class after setting proper form action.

This works for me when I initialize hidden form fields with values depending on what button was clicked but with the same form action. Though the approach in your case can be the same. Hope this direction will help you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM