前提・実現したいこと
RailsでECサイトを作っているRails初心者です。
ログイン中のcustomerが、itemの詳細ページにて、数量を入力して、「カートに保存」ボタンを押すことで、CartItemモデルに保存される仕組みを作っています。
Rails 5.2
ログイン機能はdeviseを使用
発生している問題
商品詳細ページ'/items/1'にて、数量を選択して、「カートに入れる」ボタンを押しましたが、保存がされません。render先には「失敗」のフラッシュメッセージが表示されます。
cart_itemsテーブルのカラムは"customer_id", "item_id", "quantity"です。
byebugで確認したところ、
"customer_id"と"quantity"は値が入っていますが、@cart_itemはitem_id: nilとなってしまっていました。
なので「@cart_item.item_id = params(:id)」となっているところを、試しに「item_id = 2」としてみまして再度試してみましたが、保存はされませんでした。
アソシエーションは以下です。
・item
has_many :cart_items
・cart_item
belongs_to :customer
belongs_to :item
・customer
has_many :cart_items
該当のソースコード
ruby
1class CartItemsController < ApplicationController 2 def index 3 @cart_item = CartItem.where(customer_id: current_customer.id) 4 end 5 6 def create 7 @cart_item = CartItem.new(cart_item_params) 8 @cart_item.customer_id = current_customer.id 9 @cart_item.item_id = params(:id) 10 11 if @cart_item.save 12 redirect_to cart_items_path 13 else 14 flash[:alert] = "失敗" 15 render :index 16 end 17 end 18 19 20 private 21 def cart_item_params 22 params.require(:cart_item).permit(:item_id, :quantity) 23 end 24end
試したこと
試しに「@cart_item.item_id = 2」としても保存がされないので、
・item_idが取得できないことと
・保存ができないこと
は別の問題であると思われます。
item_idを取得する方法も教えていただけると助かります。
回答2件
あなたの回答
tips
プレビュー