レールに 2 つのボタンがある 1 つのフォームを作成したいと考えています。どちらの形式も同じデータを異なる方法で操作するため、関連する機能を 2 つの異なる方法で保持することをお勧めします。以前、params[:commit] で文字列比較を行った後、適切なメソッドにリダイレクトしましたが、私の直感では、より良い方法があると言われています。提案?
4 に答える
フォームを2つの異なるアクションに送信する2つの異なる送信ボタン:
<%= submit_tag('Insert', :onclick=>"document.myForm.action = 'insert';") %>
<%= submit_tag('Update', :onclick=>"document.myForm.action = 'update';") %>
「myForm」の代わりに、タグの「name」プロパティにあるものをすべて配置する必要があります。
このプロパティは、デフォルトのform:forタグで次のように設定できます。
<%= form_for(@something, :html => {:name => "myForm"}) do |f| %>
JavaScript を使用しない場合、唯一の解決策は、コントローラーの POST データを見て、どのボタンがクリックされたかを確認することです。これは、単純に HTML フォーム要素の性質によるものです。アクション属性に複数の値を持つことはできません。
JavaScript が使用できない場合に何が起こるか心配していない場合は、実際にフォームを送信する前に、送信ボタンの 1 つがクリックされたときにアクション属性を変更するスクリプトを作成できます。ajax リクエストの場合、フォームの属性を変更することなく、正しい URL に直接送信するだけで済みます。
プロトタイプ.js を使用している場合は、Form.serialize() を使用してフォームからデータを取得し、そこからさまざまなボタンを使用してさまざまなアクションに投稿できます。
また、既にフォームで params[:commit] メソッドを使用しました。I18nヘルパーを使用すると、ビューとコントローラーで同じルックアップを使用できるため、これが少し壊れにくくなり、文字列が少し変更されるという問題が発生しなくなります。
それに加えて、JavaScript を使用してボタンのクリックを処理し、フォーム データを別の Rails アクションに送信することしか考えられません (フォームを送信する前に、フォームの HTML アクション属性を JavaScript で変更できるかもしれません)。