form_withメソッドは、Railsで使うフォームの作成方法。これを使うとデータを入力する画面(フォーム)を簡単に作成できます。
たとえば、「商品を購入する」や「新しいユーザーを登録する」などの機能がある場合、それぞれのデータを入力するフォームが必要です。form_withメソッドは、このようなフォームを作成するのに便利です。
基本の使い方
<%= form_with model: @user do |form| %>
<%= form.text_field :nickname %>
<%= form.submit "登録" %>
<% end %>
model: @user の部分で、どのデータ(この場合はユーザー)を扱うフォームか指定します。
form.text_field :nickname は「ニックネーム」を入力するための箱を作ります。
form.submit "登録" は送信ボタンを作ります。
このように、form_withを使うと、HTMLを直接書かなくてもRailsが自動で適切なフォームを生成してくれます。
form_withでpathを記述するかどうかは、フォームがどこに送信されるかによります。
-
pathを書かない場合
form_with(model: @user)のように書いた場合、Railsは自動的にフォームの送信先を判断します。例えば、新規ユーザー登録ページで@userが新しいユーザーの場合、フォーム送信先はusers#create(ユーザー登録を行うアクション)になります。また、ユーザー情報を編集するページでは、送信先がusers#updateになります。このように、モデルを使うことで、Railsが自動的に適切なパスを選んでくれます。 -
pathを書く場合
明確なURLに送信したい場合や、モデルを使わないときはpathを指定します。たとえば、ログインフォームなど特定のURLに送信したいときはform_with(url: login_path)のようにurlオプションを使って送信先を指定します。
まとめ
pathを書かない → Railsが自動で送信先を決めてくれる。
pathを書く → 自分で送信先を指定したいときに使う。
このように、フォームが「新規作成」か「編集」かを自動で判断してくれるか、自分で送信先を決めたいかによって使い分けます。