ActionView::Helpers::FormBuilder
def fields_for(record_name, record_object = nil, fields_options = nil, &block)

説明

外のフォームの中で、関連するモデルの属性に紐づくフィールドを作ります。

引数

値を変えると、ERB と HTML が変わります。

ブロックの中で作る HTML 要素の name 属性と id 属性の値の途中に入ります。モデルに comments_attributes= のようなメソッド(accepts_nested_attributes_for で作られるもの)があるかで、次のように変わります。
  • ある:関連のネストとして扱い、name 属性と id 属性の値を、_attributes の付いた形にします。
    • 関連が複数のレコード(has_many):添え字を付けて、レコードの数だけブロックを繰り返します(レコードがなければ、何も出力しません)。
    • 関連が 1 つ(has_one):添え字は付けず、ブロックの中身を 1 回だけ出力します。関連のレコードがなければ、何も出力しません。
  • ない:article[author][name] のように、名前をそのまま入れます。
= nil
渡す値によって、次のように変わります。
  • デフォルト:関連のネストなら、関連のレコード(@article.comments)を使います。関連のネストでないときは何も使わないので、HTML 要素に初期値は入りません。
  • オブジェクト 1 つ(@comment):record_name が has_many の関連(:comments)でも、@article.comments の代わりにそのオブジェクトだけを使い、ブロックの中身を 1 回だけ出力します。
  • 配列:関連のレコードの代わりに、配列の要素ごとにブロックを繰り返します。
fields_options= nil
false にすると、保存済みのレコードの id を入れる hidden の <input> を追加しません。デフォルトでは外のフォームに渡した値を引き継ぎます。外のフォームにもなければ、ブロックのあとに追加します。ブロックの中で c.hidden_field :id を書いて、自分で id を入れる hidden の <input> を作ったときは、追加しません。
5
関連のネストの添え字を 0 から数える代わりに、渡した値にします。どのレコードも同じ添え字になります。Proc を渡すと、レコードごとに呼んで、返した値を使います。
3
ブロックの中で作る HTML 要素の name 属性と id 属性の値に、添え字として追加します。関連のネストでは、レコードの添え字のうしろに入ります。デフォルトでは、関連のネストなら添え字を追加しません。関連でない名前(:author など)なら、外のフォームに渡した index を引き継ぎます。nil を渡すと、添え字の代わりに [] を追加します(article[author][][name])。
true にすると、ブロックの中で作る HTML 要素に id を追加しません。c.label の for も追加しません。デフォルトでは id を追加します。外のフォームに渡した値は引き継ぎません。
true にすると、モデルにない属性では、初期値のない HTML 要素を作ります。デフォルトではモデルにない属性の値をモデルから読もうとして、NoMethodError になります。外のフォームに渡した値は引き継ぎません(&block の c.text_field :author_name で試せます)。
ここにない options は、次のとおりです。
  • namespace:渡しても使わず、外のフォームの値を使います。
  • builder:デフォルトは外のフォームのクラスです。
  • そのほか(class など):HTML 属性にはならず、ブロックのフォームビルダーに渡す設定として扱います。
&block= nil
ブロックは省けません。渡さないと LocalJumpError になります。

ERB

直前との違い: 追加 削除 変更


          

HTML


          

プレビュー

プレビューを操作すると、フォーム送信の内容が変わります。

フォーム送信

フォームデータ

namevalue
リクエストボディを見る

Content-Type:


              

params


              
このサイトでは、CSRF のトークンの値を伏せています((hidden))。本物は、描画のたびに変わる長い文字列です。