【Rails 5.1】 form_withの使い方
ProgateでRails学習してる方も多いと思いますが、Progateのフォーム機能実装ではform_tag
を使用してます。
現在Rails5.1以降ではform_withのみ使用を推奨してるので、学習した内容のメモとして、今までのform_tag
やform_for
の違いや、
form_with
の機能をまとめてみました。
目次:
form_tag
とform_for
違いについて
form_for: 任意のmodelに基づいたformを作るときに使う form_tag: modelに基づかないformを作るときに使う
関連するモデルが無し form_tag
<%= form_tag users_path do %> <%= text_field_tag :email %> <%= submit_tag %> <% end %>
関連するモデルが有り form_for
<%= form_for @user do |form| %> <%= form.text_field :email %> <%= form.submit %> <% end %>
form_with
について
関連するモデルが無し form_with
<%= form_with url: users_path do |form| %> <%= form.text_field :email %> <%= form.submit %> <% end %>
url:
を指定する
関連するモデルが有り form_with
<%= form_with model: @user do |form| %> <%= form.text_field :email %> <%= form.submit %> <% end %>
model:
を指定
これまでのモデル有無に関わらずform_with
のみで記述可。
form_withでは最初からremote: true
の状態
これまではform_for
や、form_tag
ではajaxの実装の為にremote: trueをつける必要がありましたが、form_withでは最初からtrueになっています。
その為、ajaxを使用しない場合にはremote: false
を記述する必要があります。
また、通常のページ遷移するフォーム送信の場合にはlocal: true
で記述する必要があります。