使用formtastic进行多次提交操作

时间:2012-12-13 16:46:21

标签: ruby-on-rails formtastic

我正在尝试设置一个包含多个提交操作的formtastic表单,以及Railscast#38。 Formtastic中与此相当的是什么?

<%= submit_tag 'Create' %>
<%= submit_tag 'Preview', :name => 'preview_button' %>

This post给了我希望,但看起来commit_button在2.1.0中已被弃用,我似乎无法弄清楚新的语法。

这是我的代码,它的价值。我想让每个提交按钮转到同一个控制器,我会以不同的方式处理它们:

# Use prepaid credits to checkout
<%= f.action :submit, :as => :button, :label => "Order Critique (1 credit will be spent)", :button_html => { :class => "btn btn-primary", :disable_with => 'Processing...' } %>
# Use credit card to checkout
<%= f.action :submit, :as => :button, :label => "Order Critique ($10)", :button_html => { :class => "btn btn-primary", :disable_with => 'Processing...' } %>

1 个答案:

答案 0 :(得分:0)

TL; DR:如果您使用javascript提交表单,则不会在提交参数中继承提交按钮的名称。

我的问题最终成为Railscasts Episode#288中使用的代码。在Stripe令牌签出后提交表单时,会触发此CoffeeScript函数:

handleStripeResponse: (status, response) ->
  if status == 200
    $("#stripe_card_token").val(response.id)
    $("#my_form_id")[0].submit()
  else
    # other stuff

由于javascript正在使用$("#my_form_id")[0].submit()进行表单提交,因此name参数不会在commit params中继承。

我的解决方案是将“点击”属性添加到点击的按钮...

$('form_input[type=submit]').click ->
  $('input[type=submit]', $(this).parents('form')).removeAttr('clicked')
  $(this).attr('clicked', 'true')

..然后抓住点击按钮的id属性用它填充隐藏字段:

submitter = $("input[type=submit].clicked=true").attr("id")

我不是特别喜欢这个解决方案。感觉就像我的js知道太多了,我不喜欢依赖于js这类事情。任何批评或更好的解决方案当然是受欢迎的。)