#概要
Rails 5.1から導入されたform_with
これはrailsでは非推奨のヘルパーとなったform_for,form_tagの代わりに新たに実装されたformヘルパーです。
今回はform_withの使い方についてまとめていこうと思います。
拙い記事でツッコミどころが多々あると思いますが、よろしくお願いします。
#form_for&form_tagとは?
Formbuilderオブジェクトのformブロックを引数にした入力フォームのヘルパー。
Rails 5.1では非推奨機能になり、今後廃止される可能性のあるヘルパーメソッド。
<%= form_for @sample do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= end %>
form_forとform_tagの違いは入力フォームをモデルと関連付けるか付けないか
form_forは入力フォームに@sampleという具合にインスタンス変数が指定されている。
一方でform_tagは
<%= form_tag(sample_path) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= end %>
モデルとは関連付けない形でformブロックを生成している。
二つの使い分けとしては、
form_forは投稿フォームなどのモデルと関連づけたデータの送信。
form_tagは検索フォームなどのモデルと関連しないデータの送信。
これが一般的だと思います。
form_forとform_tagにはURLオプションとHTMLオプションが存在している。
##URLオプション
formに設定したいアクションや送信先がある場合に設定する。
##HTMLオプション
formなどにclassなどの要素を追加したい場合に設定する。
#form_withとは
fprm_withとはrails 5.1から新しく追加されたヘルパーメソッド。
form_forとform_tagが廃止予定になる代わりに新しく追加された。
##form_withの構文
<%= form_with(model: sample, remote: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= end %>
<%= form_with(url: sample_path, remote: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= end %>
form_withはform_forとform_tagと違い、モデルを指定する場合と指定しない場合の二通りで実装できる。
また、form_withではデフォルトでremote: tureになっており、特にオプションを設定しなくともajaxでの
データ送信を行える。
##form_withのオプション
オプション | 説明文 |
---|---|
:url | 送信先のURLを指定する |
:method | HTTPリクエストの指定を行なう (POST/GETなど) |
:format | データ形式の指定 (JSON/XMLなど) |
:scope | inputフィールドにプレフィックスの追加を行なう |
:namescope | form要素に一意のIDを追加する場合に使用 |
:model | form要素と関連づけるモデルの指定 |
:authenticity_token | 認証用のトークンを送信する場合に使用 |
:local | リモート送信を行なわない設定。ページが遷移する送信設定にする場合に使用 |
:skip_enforcing_utf8 | utf-8を消す場合に使用 |
:builder | Formbuilderオブジェクトで定義した独自formコントロールを設定する場合に使用 |
:id | formのidを指定する場合に使用 |
:class | formのclassを指定する場合に使用 |
##まとめ
form_forとform_tagは廃止される可能性が高いため,
form_withを使用した方がよろしいのではと思います。