1

Railscast#38に続いて、複数の送信アクションを含む形式的なフォームを設定しようとしています。Formtasticでこれに相当するものは何ですか?

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

この投稿は私に希望を与えましたが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...' } %>
4

1 に答える 1

0

TL; DR: javascriptを使用してフォームを送信する場合、コミットパラメータで送信ボタンの名前が引き継がれません。

私の問題は、Railscastsエピソード#288で使用されているコードであることになりました。このCoffeeScript関数は、Stripeトークンがチェックアウトした後、フォームを送信すると起動されます。

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パラメーターに引き継がれません。

私の解決策は、クリックされたボタンに「クリックされた」属性を追加することでした...

$('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に依存するのは好きではありません。どんな批判やより良い解決策も確かに歓迎されます:)

于 2012-12-16T21:05:09.413 に答える