質問: ecサイトのオーダーフォームを作っているのですが、調べてもわからない点があるので質問させていただきます。 現在作っているものは、カートに商品を入れて、そこから注文情報の入力(オーダーフォーム)。不備がなければ送信し、確定メールが届き、カートはデリートされるというものでして、オーダーフォームでは、ユーザーが入力する欄とは別に、自動でカートの中の情報とユーザーidが入力されるようになっています。そこで問題が起きました。 カートには中間テーブルとしてline_itemというのがあり、それが持っているのが商品(product_id)と数量(quantity)となるのですが、こちらそれぞれ1種類しか登録されません。カートの中の商品が1種類の場合は問題ないのですが、複数種類ある場合は2つ目以降はなかったことになってしまいます。中間テーブルのline_itemもカートがなくなると一緒に無くなります。 フォームにはeachとhidden_fieldを使っています。 注文確定し、cartやline_itemがなくなった後に注文した時のcartの中身が全てわかるようにするにはどのように記述したらよいでしょうか? ``` <%= form_for(@order) do |f| %> <% @cart.line_items.each do |cart| %> <%= f.hidden_field :product_id, value: cart.product_id %> <%= f.hidden_field :quantity, value: cart.quantity %> <% end %> <% end %> ``` 上でproduct_idとそのquantityがそれぞれ引き出せて、そこからカートの注文した際の中身を再現できると思ったのですがダメでした。 以上ですが何かお気付きのところありましたらご教授お願いいたします。
回答: 配列を埋め込みたいときは ``` <%= form_for(@order) do |f| %> <% @cart.line_items.each do |cart| %> <%= hidden_field_tag "product_id[]", value: cart.product_id %> <%= hidden_field_tag "quantity[]", value: cart.quantity %> <% end %> <% end %> ``` のように記述すると コントローラ側で受け取る際のストロングパラメーターで ``` def cart_params params.permit(product_id:[],quantity:[]) end ``` と記述することで、配列形式で取得できます。