レールで多くの可能なアクションを使用して1つのフォームを作成する方法は?
-
21-09-2019 - |
質問
レールに2つのボタンを備えた1つのフォームを作成したいと思います。どちらのフォームも同じデータをさまざまな方法で動作し、関連する機能を2つの異なる方法で保持したいと思います。以前は、Params [:commit]で文字列比較を行った後、適切な方法にリダイレクトしましたが、私の腸はより良いアプローチがあると言います。提案?
解決
また、フォームにparams [:commit]メソッドを既に使用しました。 i18nヘルパーを使用すると、ビューとコントローラーで同じルックアップを使用できるため、これが少し脆弱になります。そのため、文字列が少し変わるという問題に遭遇しません。
それに加えて、JavaScriptを使用してボタンのクリックを処理し、フォームデータを異なるRailsアクションに送信することのみを考えることができます(フォームを送信する前にJavaScriptを使用してフォームのHTMLアクション属性を変更できます)。
他のヒント
フォームを2つの異なるアクションに送信する2つの異なる送信ボタン:
<%= submit_tag('Insert', :onclick=>"document.myForm.action = 'insert';") %>
<%= submit_tag('Update', :onclick=>"document.myForm.action = 'update';") %>
「myform」の代わりに、タグの「名前」プロパティにあるものを置く必要があります。
そのプロパティをデフォルトのフォームに設定できます:次のようなタグの場合:
<%= form_for(@something, :html => {:name => "myForm"}) do |f| %>
JavaScriptを使用せずに、唯一のソリューションはあなたが言及しているものです。コントローラーの投稿データを調べてクリックされたボタンをチェックします。これは、単にHTMLフォーム要素の性質によるものです。アクション属性に対して複数の値を持つことはできません。
JavaScriptが利用できないときに何が起こるか心配していない場合は、実際にフォームを送信する前に、[ボタンの1つがクリックされたときにアクション属性を変更するスクリプトを書くことができます。 AJAXリクエストの場合、フォーム上の属性を変更することなく、単に正しいURLに直接送信することができます。
prototype.jsを使用している場合は、form.serialize()を使用してフォームからデータを取得し、そこから異なるボタンを使用して異なるアクションに投稿できます。