ume

rails7 from_withのオプションの違い(model:オプションとurl:オプション)

結論

フォームのデータをコントローラーでparams[:モデル名][:キー]でデータを受け取るかparams[:キー]で受け取るかの違い

modelオプション

⇨params[:モデル名][:キー]でデータを受け取る

urlオプション

⇨params[:キー]でデータを受け取る

modelオプション

例 

 <%= form_with model: CartProduct.new do |f| %>
  <%= f.number_field :quantity, class: "form-control text-center me-3", style: "max-width: 4rem", min: 1, max: 100%>
省略
<% end %>

modelオプションでモデルのインスタンス(@cart_productなど)を渡すかModel名.newで設定すると.
コントローラー内で

params{
 "cart_product"=>{"quantity"=>"4"}
}

このようになります。 paramsの中に[:モデル名][:key]のようになります.

urlオプション

 <%= form_with url: "/cart_products/1" do |f| %>
  <%= f.number_field :quantity, class: "form-control text-center me-3", style: "max-width: 4rem", min: 1, max: 100%>
省略
<% end %>

このようにurlで指定すると

params{
{"quantity"=>"4","id"=>"1"}
}

このようになります。modelオプションの時とは違い[:model名]が入らずにシンプルになります。またform_with url: "/cart_products/1" do |f| %>で設定した/cart_products/1の1の部分が{id:1}のようにparamsの中に格納されます

まとめ

modelオプションもurlオプションもしていることは指定したサーバーにフォームのデータを送ることが目的ですが、それぞれparamsの中の中にデータを入れる方法が異なることがわかりました。