現在ECサイトを作成しています。
商品ページを個別に作成し、そこからカートに加える機能を実装したいです。
今参考にしているのは
でViewは自分で付け足してみました。
ですが、カートに入れたい商品を保存する時に
param is missing or the value is empty: cartitem
のエラーが発生し、原因がわからず困っています。
わかる方いらっしゃいましたらお手数ですがご教授いだたきますようよろしくお願い申し上げます(m_ _m)
###期待する動作
カートに入れるを押すとその商品がユーザと紐付けられて保存される
###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
MySQL: 5.7.18
devise(gem):4.4.0
###参考サイト
Rails5でカート機能を作るためのロジックを作ってみた
###現在の状況
- カート機能(カートに入れる、カートの中身を表示する)を実装するための記述はCarts_controllerを作成して書いています。
- 商品ページは個別に作成しています
###試したこと
@cartitem =Cartitem.new#(cartitem_params)とするとエラーが出ずに画面遷移しました(レコードの登録はできていません)。
###該当のソースコード(必要だと思う部分だけ)
db/schema.rb
ruby
1 #cartitemテーブル 2 create_table "cartitems", force: :cascade do |t| 3 t.integer "quantity", limit: 4 4 t.integer "item_id", limit: 4 5 t.integer "user_id", limit: 4 6 end 7 #商品テーブル 8 create_table "items", force: :cascade do |t| 9 t.string "itemName", limit: 255 10 t.float "price", limit: 24 11 end 12
config/routes.rb
ruby
1 resources :items do 2 member do 3 get 'preview'#個別ページ 4 post '/add_item' => 'carts#add_item'#カートへ追加する 5 end 6
app/controllers/carts_controller.rb
ruby
1class CartsController < ApplicationController 2 3 def add_item 4 5 if @cartitem.blank? 6 #カートに同じ商品がない場合 7 #↓ ↓ ↓ ↓ ↓これだとエラーが発生する 8 @cartitem =Cartitem.new(cartitem_params) 9 current_user.cartitems.build(cartitem_params) 10 #↓ ↓ ↓ ↓ ↓これだとエラーが発生せずレコードは作成されるが、数量・商品IDが保存されない 11 @cartitem =Cartitem.new#(cartitem_params) 12 @cartitem.save 13 current_user.cartitems.build 14 @item =Item.find_by(id: @cartItem.id) 15 redirect_to :cart_path, success:"#{@item.itemName}がカートに追加されました" 16 else 17 #カートに同じ商品がある場合 18 @cartitem.quantity += params[:quantity].to_i 19 @cartitem.save 20 @item =Item.find_by(id: @cartItem.id) 21 redirect_to :cart_path, success:"#{@item.itemName}がカートに追加されました" 22 end 23 end 24 25 private 26 def set_cartitems 27 # @cartitem = Cartitem.new 28 @cartitem = current_user.cartitems.find_by(item_id: params[:item_id]) 29 binding.pry 30 end 31 32 def cartitem_params 33 #ここの部分でエラーが発生する? 34 params.require(:cartitem).permit(:quantity, :item_id, :user_id) 35 end 36end
app/controllers/items_controller.rb
ruby
1class ItemsController < ApplicationController 2 def preview 3 @item = Item.find(params[:id]) 4 end 5end
app/views/items/preview.html.erb
ruby
1. 2<%= form_tag("/add_item", method: "post") do %> 3 <%= text_field_tag :quantity %> 4 <%= hidden_field_tag :item_id, @item.id %> 5 <%= submit_tag("カートに入れる") %> 6<% end %> 7.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。