teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

cartsコントローラーの追記

2021/03/13 08:19

投稿

syosinsya-mark
syosinsya-mark

スコア3

title CHANGED
File without changes
body CHANGED
@@ -64,6 +64,23 @@
64
64
  end
65
65
 
66
66
  ```
67
+ ### 問題コード箇所 (cartsコントローラー)
68
+ ```
69
+ class CartsController < ApplicationController
70
+ def index
71
+ @cart = Item.find(session[:cart])
72
+ end
73
+
74
+ def create
75
+ @order = Order.new(item_id: params[:item_id])
76
+ session[:cart] = []unless session[:cart]
77
+ session[:cart] << params[:item_id]
78
+ flash[:success] = "カートに追加できました!"
79
+ redirect_to item_orders_path
80
+ end
81
+
82
+ end
83
+ ```
67
84
  ### 問題コード箇所 (order_index.html.erb)
68
85
  商品価格である item.price をカート内商品金額を足した合計を @=sum としています。
69
86
  ```
@@ -101,17 +118,39 @@
101
118
 
102
119
  ### 試したこと
103
120
  購入ボタンクリック後、ordersコントローラーcreateアクションでは@sumはnilとなり、上手くデータを持ってこれていません。
104
- ordersコントローラーcreateアクションに以下を記述してみましたが、
121
+ ordersコントローラーcreateアクション箇所に以下を記述してみましたが、どちらの記述も
105
122
  NoMethodError undefined method `sum' for nil:NilClass となります。
106
123
  ```
124
+ def create
107
- @items = Item.all
125
+ @items = Item.all
108
126
  @sum = @Items.sum(:item_price)
127
+ @order = Order.new(order_params)
128
+ if @order.valid?
129
+ pay_item
130
+ @order.save
131
+ return redirect_to root_path
132
+ else
133
+ render 'index'
134
+ end
135
+ end
136
+
109
137
  ```
110
138
  ```
139
+ def create
111
- @items = Item.all
140
+ @items = Item.all
112
141
  @carts.each do |item|
113
142
  @sum += item.item_price
114
143
  end
144
+ @order = Order.new(order_params)
145
+ if @order.valid?
146
+ pay_item
147
+ @order.save
148
+ return redirect_to root_path
149
+ else
150
+ render 'index'
151
+ end
152
+ end
153
+
115
154
  ```
116
155
 
117
156
  どのように記述したら、商品の合計金額@samをordersコントローラーcreateアクションで使用できるようになるのか、ご教示願います。よろしくお願いいたします。