form_with: Rails 5.1+で導入されたフォームヘルパーメソッド。form_forとform_tagの機能を統合し、モデルベースのフォームとモデルがないフォームの両方を作成可能。
基本使用法:
model: オプションでモデルインスタンスを指定可能。自動的にアクションURLとHTTPメソッドが設定される。url: オプションでフォームデータ送信URLを直接指定可能。local: trueで非同期(AJAX)送信ではなく、通常のHTTPリクエストでフォームデータを送信するように設定。<%= form_with model: @article, local: true do |form| %>
<%= form.text_field :title %>
<%= form.text_area :body %>
<%= form.submit %>
<% end %>
モデルがないフォーム:
url: オプションでデータ送信パスを指定する必要がある。<%= form_with url: search_path, method: :get, local: true do |form| %>
<%= form.label :query, 'Search Query' %>
<%= form.text_field :query %>
<%= form.submit "Search" %>
<% end %>
fields_forとの組み合わせ:
form_with内で使用し、モデルの関係を反映したネストされたフォームフィールドを簡単に作成。has_manyやaccepts_nested_attributes_forの関係に便利。<%= form_with model: @person, local: true do |form| %>
<%= form.text_field :name %>
<%= form.fields_for :addresses do |addresses_form| %>
<%= addresses_form.text_field :street %>
<% end %>
<%= form.submit "Save" %>
<% end %>
要約:
form_with: モデルベースとモデルレスのフォームをサポート、デフォルトでAJAXフォームを作成、local: trueで通常のHTTPリクエストによるフォーム送信に変更可能。url:, method: オプションでフォームの送信パスとHTTPメソッドをカスタマイズ可能。fields_forと組み合わせて複雑なフォーム構造とモデルの関係を簡単に扱う。