ActionView::Helpers::FormHelper
def fields_for(record_name, record_object = nil, options = {}, &block)

説明

<form> を作らずに、ブロックの中身だけを出力します。ブロックの中で作る HTML 要素は、モデルの属性に紐づきます。

引数

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

ブロックの中で作る HTML 要素の name 属性と id 属性の値の前の部分になります。
= nil
渡したオブジェクトの値を、HTML 要素の初期値に使います。デフォルトでは、record_name と同じ名前のインスタンス変数があれば、その値を使います。
options= {}
1
ブロックの中で作る HTML 要素の name 属性と id 属性の値に、添え字として追加します。nil を渡すと、添え字の代わりに [] を追加します(comment[][body])。
"admin"
ブロックの中で作る HTML 要素の id 属性の値の前に追加します。name 属性の値は変わりません。
true にすると、ブロックの中で作る HTML 要素に id を追加しません。f.label の for も追加しません。デフォルトでは id を追加します。form_with と違い、config.action_view.form_with_generates_ids は使いません。
true にすると、モデルにない属性では、初期値のない HTML 要素を作ります。デフォルトではモデルにない属性の値をモデルから読もうとして、NoMethodError になります(&block の f.text_field :author_name で試せます)。
LabeledFormBuilder
ブロックの f(FormBuilder)のクラスを変えます。このページの LabeledFormBuilder は、text_field の前に同じ属性の label を追加するように、FormBuilder の text_field を上書きしたクラスです。
fields_for はブロックの中身だけを出力し、自分では HTML 要素を作りません。そのため、ここにない options(class など)は HTML 属性にはならず、ブロックのフォームビルダーに渡す設定として扱います。
&block= nil
ブロックは省けません。渡さないと LocalJumpError になります。

ERB

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


          

HTML


          

プレビュー

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

フォーム送信

フォームデータ

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

Content-Type:


              

params