0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

form_with [Rails 5.1から新規導入されたformヘルパー]

Posted at

#概要

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を使用した方がよろしいのではと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?