ActionView::Helpers::FormTagHelper
def form_tag(url_for_options = {}, options = {}, &block)

説明

モデルに紐づかない <form> を作ります。

引数

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

<form> の action 属性の値になります。渡す値によって、次のように変わります。
  • 文字列:そのまま action 属性の値にします。
  • Hash:url_for と同じく、ルーティングから URL を作ります({ controller: "articles", action: "index" } なら /articles)。書かなかったキーは今のリクエストの値で補うので、空の Hash({})では、そのフォームを描画したリクエストの URL になります。このサイトでは /api/render です。
  • false:action を追加しません。
options に action を渡しても、この引数から作った値になります。ただ、action: false なら、引数が何でも action を追加しません。ほかの値(nil、:back、モデルのオブジェクトなど)は、url_for に渡します(nil は {} と同じです)。
options= {}
渡す値によって、次のように変わります。
  • :get:method="get" にして、CSRF のトークンの hidden の <input> を追加しません(ほかの値では追加します)。
  • :patch、:put、:delete:method="post" にして、_method の hidden の <input> も追加します。Rails は届いた POST の _method を見て、PATCH などとして扱います。
  • デフォルト:method="post" にします。
true にすると、enctype="multipart/form-data" を追加します。form_with で f.file_field を使ったときと違い、ブロックの中に file の <input> があっても、この option を渡さなければ追加しません。enctype も渡したときは、multipart/form-data で上書きします。
true にすると、data-remote="true" を追加します。Rails UJS を入れていないアプリ(Rails 7 以降の標準)では、この HTML 属性は何もしません。config.action_view.embed_authenticity_token_in_remote_forms が false のアプリでは、CSRF のトークンの hidden の <input> も追加しません(このサイトは初めの値の nil なので、追加します)。
false にすると、CSRF のトークンの hidden の <input> を追加しません。文字列を渡すと、その文字列をトークンの hidden の value 属性の値にします。true にすると、その設定のアプリでも、remote: true のときにトークンを追加します。
true にすると、name="utf8" で value が ✓ の hidden の <input> を追加します。デフォルトは config.action_view.default_enforce_utf8 の値です(load_defaults 6.0 以降は false)。
ヘルパー共通の options

Rails はどのヘルパーでも、これらの options を同じように処理します。HTML の仕様で <form> に使えないものや、使う場面が少ないとこのサイトで判断したものは、ここでは省いています。

すべてのヘルパー共通

{active: true, hidden: false}
Hash を渡すと、値が false と nil 以外のキーを空白でつなぎます。配列を渡すと、nil、false、空の文字列(空白だけの文字列も)を外して、空白でつなぎます。
{controller: "tags", tags_suggestions_value: ["ruby", "rails"]}
Hash を渡すと、キーの _ を - にして、data-* 属性を追加します。値に配列や Hash を渡すと、JSON の文字列にします。
{describedby: ["name_help", "name_error"], invalid: false}
:data と同じく、aria-* 属性を追加します。値が配列なら、nil と空の文字列を外して、空白でつなぎます(何も残らなければ、追加しません)。値が Hash なら、値が false と nil 以外のキーを空白でつなぎます。
ここにない options は、<form> の HTML 属性になります。値が nil なら、その HTML 属性は追加しません。accept-charset="UTF-8" は、どんなときも追加します。options の accept-charset に別の値を渡しても、UTF-8 になります。
&block= nil
ブロックを渡すと、ブロックの出力を <form> の中身にし、</form> で閉じます。渡さないと、開くタグと hidden の <input> だけを返し、</form> は付けません(閉じるタグは、自分で書きます)。

ERB

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


          

HTML


          

プレビュー

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

フォーム送信

フォームデータ

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

Content-Type:


              

params


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