ActionView::Helpers::FormHelper
def form_for(record, options = {}, &block)

説明

モデルに紐づく <form> を作り、その中にブロックの中身を出力します。

引数

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

渡す値によって、次のように変わります。
  • オブジェクト:form_with の model: と同じく、ブロックの中で作る HTML 要素の name 属性と id 属性の値の前の部分と、options の url と method を渡さないときの値を決めます。form_with と違い、<form> に class と id を追加します。どちらの値も、モデルの名前と、オブジェクトが保存済みかどうかから作ります。保存済みなら、id 属性の値の最後にオブジェクトの id も追加します。
  • Symbol か文字列(:article など):form_with の scope: と同じく、name 属性と id 属性の値の前の部分を決めます。その Symbol と同じ名前のインスタンス変数があれば、その値を HTML 要素の初期値に使います。このときは as を使わず、options の id と class を、そのまま <form> の属性にします。
  • 配列:form_with の model: に配列を渡したときと同じです。名前と class、id は、最後の要素から作ります。
  • nil:ArgumentError になります。
options= {}
"post"
ブロックの中で作る HTML 要素の name 属性と id 属性の値の前の部分に、モデルの名前の代わりに渡した値を使います。<form> の class と id も、この値から作ります。このときは保存済みでも <form> の id 属性の値にオブジェクトの id を追加しません。
"admin"
ブロックの中で作る HTML 要素と <form> の、id 属性の値の前に追加します。form_with では、<form> の id 属性の値には追加しません。
true にすると、data-remote="true" を追加します。form_with の local: false と同じですが、form_with と違い、CSRF のトークンの hidden の <input> を追加しません。authenticity_token も渡したときや、config.action_view.embed_authenticity_token_in_remote_forms が true のアプリでは、追加します。
"article_form"
record にオブジェクトを渡したときは、渡しても使いません。<form> の id を変えるときは、:html で渡します。
"article_form"
record にオブジェクトを渡したときは、渡しても使いません。<form> の class を変えるときは、:html で渡します。
{id: "article_form", class: "article_form"}
Hash の中身を <form> の HTML 属性にします。ただ、form_with の html と同じく、method、multipart、remote、authenticity_token、enforce_utf8 は HTML 属性にはせず、action は使いません。id と class も、ここで渡せば record から作った値の代わりに使います。
渡しても使いません。form_with と違い、ブロックの中で作る HTML 要素には、いつも id を追加します。
true にすると、モデルにない属性では、初期値のない HTML 要素を作ります。デフォルトではモデルにない属性の値をモデルから読もうとして、NoMethodError になります。form_with とは、デフォルトの動きが逆です(&block の f.text_field :subtitle で試せます)。
form_for は options を書き換えてから form_with を呼びます。ここにない options(url、format、method、multipart、authenticity_token、index、builder、data など)は、form_with と同じです。ただ、local、scope、model は使いません(html の remote、as、record で決めます)。
&block= nil
form_with と違い、ブロックは省けません。渡さないと ArgumentError になります。

ERB

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


          

HTML


          

プレビュー

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

フォーム送信

フォームデータ

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

Content-Type:


              

params


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