form_for、form_tagの違いは?


80

form_forとform_tagの違いは何ですか?form_remote_forとform_remote_tagで何か違いはありますか?

回答:


63

特定のモデルにはform_forを使用します。

<% form_for @person do |f| %> # you can use f here

    First name: <%= f.text_field :first_name %>
    Last name : <%= f.text_field :last_name %>

<% end %>

Form_tagは基本的なフォームを作成し、

<%= form_tag '/person' do -%>
  <%= text_field_tag "person", "first_name" %>
<% end -%>

53

form_for最初の引数として、activerecordオブジェクトを優先します。作成または編集フォームを簡単に作成できます(「新しい」ビューで使用するには、次のようにコントローラーで空のインスタンスを作成する必要があります。

def new
  @foo = Foo.new
end

また、フォーム変数をブロックに渡すため、フォーム自体の中でモデル名を繰り返す必要はありません。これは、モデル関連のフォームを作成するための推奨される方法です。

form_tagフォームタグを作成するだけです(もちろん、のような偽造防止の隠しフィールドを静かに準備しform_forます)。モデル以外のフォームに最適です(実際には、単純な検索フォームなどにのみ使用します)。

同様にform_remote_forform_remote_tagはモデル関連のフォームに適しており、モデル関連のフォームには適していませんが、標準のhttpメソッド(GET、POST ...)で終わる代わりに、ajaxメソッドを呼び出します。

FormHelperでは、これらすべてとはるかに多くの機能を利用できます。 およびPrototypeHelper リファレンスページ。

編集2012-07-13

Prototyperailsずっと前から削除され、リモートフォームは完全に変更されました。reguardで、最初のリンクを参照してください:remote両方のオプションform_forform_tag


1
@WowBowあなたは正しいです。結局のところ、この答えはかなり古く、プロトタイプはずっと前にレールから削除されました。答えを編集します。
ジョルジアン2012

form_forActiveRecordオブジェクトを「優先する」とはどういう意味ですか?
shiggity 2014

1
@shiggity:もちろん、記号や文字列も受け入れます。しかし、ActiveRecordオブジェクトが与えられれば、それは正しいことをします。
ジョルジアン2014

4

これらは似ているはずです:

<% form_for @person do |f| %>
  <%= f.text_field :name %>
<% end %>

そして:

<%= form_tag '/person' do %>
  <%= text_field_tag "person[name]" %>
<% end %>

同じパラメーターをコントローラーに送信する場合は、これを明示的に定義する必要があります。


短くて正確。[美しいexpiation]
デンマークのアブサール2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.