form_withについて

form_withについて

form_withは今まで場合によって使い分けをしていたform_forとform_tagを統合したもの
モデルに紐づくフォームを作成=form_for
モデルに紐付かないフォームを作成=form_tag
HTTPメソッドとアクションを判別してくれる

form_withでurlとmodelを渡す場合の違い

1. urlを渡す場合
<%= form_with url: users_path do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

この場合には、user_pathに対して、POST(送信)を行い,text_field :emailに入力されたメールアドレスの値を取得できる。

2.modelを渡す場合
  • 新規で作成されたものが渡されたとき(コントローラーのnewアクションが渡された場合)
<%= form_with model: @user do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

この場合モデルの中身が空なのでcreateメソッドを呼び出す

  • すでにあるものが渡された場合(コントローラーのeditアクションが渡された場合)
<%= form_with model: @user do |form| %>
  <%= form.text_field :email %>
  <%= form.submit %>
<% end %>

この場合、モデルの中身が存在するのでupdateメソッドを呼び出す。