【问题标题】:Have a form submit to two possible different controllers将表单提交给两个可能的不同控制器
【发布时间】:2010-11-03 20:28:53
【问题描述】:

我在网站上有以下表格

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

我想添加另一个名为 Generate 的按钮,它传递了与下面的表单相同的变量(start_date 和 end_date),但调用操作生成而不是运行。理想情况下,我希望这样做而不必有两个重复的表单。

感谢任何帮助。

【问题讨论】:

  • 我认为这不可能。但是你可以为干创建部分。

标签: javascript jquery ruby-on-rails forms


【解决方案1】:

或者你可以绑定你的按钮 onclick 动作类似

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

【讨论】:

  • 这很简单,但在这种情况下,有必要对第二个 url 进行硬编码。
【解决方案2】:

使用 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,但它不会被提交。在设置适当的表单操作后添加此类。

当我使用取决于单击的按钮但具有相同表单操作的值初始化隐藏表单字段时,这对我有用。尽管您的方法可以相同。希望这个方向对你有所帮助。

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2018-01-16
    • 2017-07-03
    • 1970-01-01
    相关资源
    最近更新 更多