#はじめに
はじめまして。元ものづくりエンジニアのまついです。独学でRailsを勉強している初学者です。
私と同じようなRails初学者の方でもわかりやすいように、そして私自身の備忘録として記事をアウトプットしていきたいと思います。
#もくじ
- form_withとは? form_tag, form_forとの違いは?
- form_withの使い方
- URL指定の場合
- モデル指定の場合
- まとめ
#1. form_withとは? form_tag, form_forとの違いは?
まずform_with、form_tag、form_forヘルパーとは__Railsで使用されるフォームを生成するヘルパーのことです。__ヘルパーとはRails内であらかじめ用意されたメソッドのことです。特にform_withはRailsアプリのviewを作成するときに必ずと言っていいほどでてきます。
ではこれら3つのヘルパーの違いは?というと、
- form_tagはモデルと関係しないフォームの生成。
- form_forはモデルのオブジェクトなどに送信したりするフォームの生成。
- form_withは上記2つの機能を統合したもの。
となります。form_tag、form_forはRails5.1以降非推奨となっており、form_withが推奨となっています。
なのでここではform_withについて書いていこうと思います。
#2. form_withの使い方
form_withの使い方は
<%= form_with(モデル or スコープ or URL [, オプション]) do |f| %>
<%= f.label :name, '名前' %>
<%= f.text_field :name %>
<%= f.submit "送信" %>
<% end %>
となります。
#3. URL指定の場合
URLを指定したい場合は、pathを指定してあげます。
<%= form_with url: users_path do |form| %>
<%= form.label :email %>
<%= form.text_field :email %>
<%= form.submit %>
<% end %>
デフォルトではPOSTメソッドで入力された値が送られます。GETメソッドを使用したい場合はオプションでmethod:を:getに指定すればできます。特に検索フォームを生成する場合にGETメソッドを使用します。
#4. モデル指定の場合
モデルを指定したい場合は
<%= form_with model: @user do |form| %>
<%= form.label :email %>
<%= form.text_field :email %>
<%= form.submit %>
<% end %>
のように受け渡したいインスタンスを指定します。
例えば、newアクションでsubmit(登録のボタンをクリック)されるとcreateアクションが呼び出されます。editアクションでsubmitされるとupdateアクションが呼び出されます。
#5. まとめ
form_withの代表的な使い方についてまとめました。
- form_withはフォーム要素を生成するヘルパー。
- URLを指定したい場合はpathを指定することで、デフォルトではPOSTメソッドが実行される。
- モデルを指定したい場合はコントローラーで生成したインスタンスを指定する。
以上になります。お役に立てれば幸いです。