15

form_tag ヘルパーを使用した基本的なフォームは正常に動作していますが、キャンセル ボタンを追加したいのですが、これを行うための構文は何ですか? キャンセル ボタンをリンクではなくボタンとして表示し、ユーザーを別の URL に移動させます (フォームを送信したくないことを示します)。

TY、フレッド

4

4 に答える 4

29

リセット ボタンを意味する場合は、フォーム内に次を貼り付けます。

<%= button_tag "Reset", type: :reset %>

テストしたところ、正常に動作し、フォーム内のすべてのフィールドがリセットされました。

于 2013-01-14T02:54:03.937 に答える
28

フォームフィールドをクリア/リセットしたい場合は、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
于 2013-01-14T05:22:48.603 に答える
3

<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

(潜在的に)ローカライズされた表示値ではなくフラグに依存しているため、はるかにクリーンな印象です。

于 2016-04-06T16:11:05.327 に答える
1

button_to同じことを実現する簡単な方法のようですが、フォーム自体の外に配置する必要がありますが、CSS で簡単に修正できます。

また、これをより一般的な方法で解決するには (まだ永続化されていないリソースでネストされたリソースを編集する場合にも機能します)、すべての元の値を非表示フィールドとして含むキャンセル用の別のフォームを作成できます。

于 2016-12-08T08:24:08.603 に答える