form_tag ヘルパーを使用した基本的なフォームは正常に動作していますが、キャンセル ボタンを追加したいのですが、これを行うための構文は何ですか? キャンセル ボタンをリンクではなくボタンとして表示し、ユーザーを別の URL に移動させます (フォームを送信したくないことを示します)。
TY、フレッド
form_tag ヘルパーを使用した基本的なフォームは正常に動作していますが、キャンセル ボタンを追加したいのですが、これを行うための構文は何ですか? キャンセル ボタンをリンクではなくボタンとして表示し、ユーザーを別の URL に移動させます (フォームを送信したくないことを示します)。
TY、フレッド
リセット ボタンを意味する場合は、フォーム内に次を貼り付けます。
<%= button_tag "Reset", type: :reset %>
テストしたところ、正常に動作し、フォーム内のすべてのフィールドがリセットされました。
フォームフィールドをクリア/リセットしたい場合は、weltschmerz の提案に従ってください。
ただし、通常、[キャンセル] ボタンはフォームをクリアするのではなく、フォームから離すことを期待しています。つまり、フォームを送信する予定はありません。
後者が必要な場合は、次のように、キャンセル時に移動したいページへのリンク (またはボタン) を作成します。
=link_to 'Cancel', my_page_path
または、ボタンが必要な場合:
= button_tag "Cancel", :type => 'button'
次に、これをコントローラーに追加します。
# before_filter for Rails 4.x and prior
before_action :check_for_cancel, :only => [:create, :update]
def check_for_cancel
if params[:commit] == "Cancel"
redirect_to my_page_path
end
end
<button>
パラメータ:commit
がローカライズされている可能性があり、コントローラで評価するのが面倒になるため、送信タグの代わりにタグをお勧めします。
Abutton_tag
は他のフィールドと同様に名前/値を持つことができるため、基本的にそれを使用してフラグを作成できます。
次のコードは、私が使用するものです。
ビューで:
<%= button_tag t('buttons.cancel'), type: "submit", name: "cancel", value: true %>
コントローラーで:
before_filter :redirect_cancel, only: [:create, :update]
private
def redirect_cancel
redirect_to my_page_path if params[:cancel]
end
(潜在的に)ローカライズされた表示値ではなくフラグに依存しているため、はるかにクリーンな印象です。
button_to
同じことを実現する簡単な方法のようですが、フォーム自体の外に配置する必要がありますが、CSS で簡単に修正できます。
また、これをより一般的な方法で解決するには (まだ永続化されていないリソースでネストされたリソースを編集する場合にも機能します)、すべての元の値を非表示フィールドとして含むキャンセル用の別のフォームを作成できます。