ActionView::Helpers::FormBuilder
def button(value = nil, options = {}, &block)

説明

外のフォームのモデルに合わせた中身の、type="submit" の <button> を作ります。

引数

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

= nil
渡すものによって、次のように変わります。
  • String:<button> の中身にします。
  • Symbol:name と id を追加し、中身はデフォルトと同じになります。ほかのヘルパーと違い、オブジェクトの値は読まず、value 属性も追加しません。
  • Hash:options として扱います(2 つ目の引数の options を省いて書けます)。
  • デフォルト:中身は、次のうち最初に見つかったものになります。
    1. helpers.submit.article.create の訳(保存済みなら update。以下も同じ)
    2. helpers.submit.create の訳
    3. Create に、モデルの名前(model_name.human)をつないだ文字列(Create Article)
options= {}
"button"
渡した値を、そのまま type 属性の値にします。デフォルトでは type="submit" を追加します。
"commit"
デフォルトでは name="button" を追加します。引数の value に Symbol を渡したときは、その Symbol から name を作ります。この option を渡すと、代わりに渡した値を使います。nil を渡すと、name を追加しません。
"draft_button"
引数の value に Symbol を渡したときは、その Symbol から id を作ります。この option を渡すと、代わりに渡した値を使います。nil を渡すと、id を追加しません。
"true"
渡した値を、そのまま value 属性の値にします。デフォルトでは value を追加しません。
渡す値によって、次のように変わります。
  • :delete や :patch など、post と get 以外:formmethod 属性の値を post にして、name="_method" を追加し、渡した値を value 属性の値にします。Rails は届いた POST の _method を見て、DELETE や PATCH として扱います。
  • :get と :post:そのまま formmethod 属性の値にします。
options の name か value を渡したときと、1 つ目の引数の value に Symbol を渡したときは、どの値でも書き換えずに渡した値をそのまま formmethod 属性の値にします。
ヘルパー共通の options

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

すべてのヘルパー共通

true にすると disabled="disabled" を追加し、false にすると追加しません。readonly、required、autofocus など、Rails が持っている一覧(BOOLEAN_ATTRIBUTES)にある HTML 属性はどれも同じで、値が false と nil 以外なら 属性名="属性名" の形で追加します。
{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 は、<button> の HTML 属性になります。値が nil なら、その HTML 属性は追加しません。
&block= nil
ブロックを渡すと、ブロックの出力を <button> の中身にします。ブロックの引数(text)には、引数の value に String を渡したときはその String、それ以外のときはデフォルトの中身が入ります。
前提
外のフォームに渡す @article です。引数の value を渡さないときの中身が、新規なら Create Article、保存済みなら Update Article になります。

ERB

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


          

HTML


          

プレビュー

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

フォーム送信

フォームデータ

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

Content-Type:


              

params


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