質問編集履歴
2
ビューの情報をより詳細に変更しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,9 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
+
ログイン状態でトップページに設定している、products#indexの「カートに入れる」ボタンを押すと、ユーザーidと紐づいたカートが生成され、cartテーブルとproductテーブルの中間テーブル的な役割を担うcart_itemテーブルに商品の個数と、それぞれのidを保存できるようにしたいです。
|
10
|
+
|
9
|
-
|
11
|
+
現在、「カートに入れる」ボタンを押すと、下記のエラーが吐かれてしまいます。
|
10
12
|
|
11
13
|
|
12
14
|
|
@@ -84,10 +86,48 @@
|
|
84
86
|
|
85
87
|
|
86
88
|
|
89
|
+
%ul
|
90
|
+
|
91
|
+
- @products.each do |product|
|
92
|
+
|
93
|
+
%li.product
|
94
|
+
|
95
|
+
.pro-main
|
96
|
+
|
97
|
+
.pro-left
|
98
|
+
|
99
|
+
.pro-image
|
100
|
+
|
101
|
+
= image_tag product.image.url, height: "120"
|
102
|
+
|
103
|
+
.pro-name
|
104
|
+
|
105
|
+
= product.name
|
106
|
+
|
107
|
+
.pro-center
|
108
|
+
|
109
|
+
.pro-explain
|
110
|
+
|
111
|
+
= product.explain
|
112
|
+
|
113
|
+
.pro-right
|
114
|
+
|
115
|
+
.pro-price
|
116
|
+
|
117
|
+
= product.price
|
118
|
+
|
119
|
+
%span
|
120
|
+
|
121
|
+
円
|
122
|
+
|
123
|
+
#以下フォーム
|
124
|
+
|
87
|
-
=form_for([@product, @cart_item], url: add_item_products_path, method: :post) do |f|
|
125
|
+
=form_for([@product, @cart_item], url: add_item_products_path, method: :post) do |f|
|
88
126
|
|
89
127
|
=f.hidden_field :product_id, value: @product.id
|
90
128
|
|
129
|
+
/=f.hidden_field :cart_id, value: @cart.id
|
130
|
+
|
91
131
|
.pro-qua
|
92
132
|
|
93
133
|
= f.number_field :quantity, value: "0", style: "text-align:right", min: 0, class: "pro-quantity"
|
1
うまく保存ができていなかったので、内容を変更しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -80,6 +80,10 @@
|
|
80
80
|
|
81
81
|
#app/views/products/index.html.haml
|
82
82
|
|
83
|
+
#トップページと商品の購入ページを兼ねています。
|
84
|
+
|
85
|
+
|
86
|
+
|
83
87
|
=form_for([@product, @cart_item], url: add_item_products_path, method: :post) do |f|
|
84
88
|
|
85
89
|
=f.hidden_field :product_id, value: @product.id
|
@@ -98,6 +102,8 @@
|
|
98
102
|
|
99
103
|
#application_controller.rb
|
100
104
|
|
105
|
+
#current_cartを定義しています
|
106
|
+
|
101
107
|
helper_method :current_cart
|
102
108
|
|
103
109
|
|
@@ -270,17 +276,57 @@
|
|
270
276
|
|
271
277
|
#cart.rb
|
272
278
|
|
279
|
+
class Cart < ApplicationRecord
|
280
|
+
|
281
|
+
has_many :cart_items, dependent: :destroy
|
282
|
+
|
283
|
+
has_many :products, through: :cart_items
|
284
|
+
|
285
|
+
belongs_to :user
|
286
|
+
|
287
|
+
end
|
288
|
+
|
273
|
-
```
|
289
|
+
```
|
274
|
-
|
290
|
+
|
275
|
-
```
|
291
|
+
```
|
292
|
+
|
276
|
-
|
293
|
+
#cart_item.rb
|
294
|
+
|
295
|
+
class CartItem < ApplicationRecord
|
296
|
+
|
297
|
+
belongs_to :product
|
298
|
+
|
299
|
+
belongs_to :cart
|
300
|
+
|
301
|
+
end
|
302
|
+
|
277
|
-
```
|
303
|
+
```
|
278
|
-
|
304
|
+
|
279
|
-
```
|
305
|
+
```
|
306
|
+
|
280
|
-
|
307
|
+
#product.rb
|
308
|
+
|
309
|
+
class Product < ApplicationRecord
|
310
|
+
|
311
|
+
mount_uploader :image, ImageUploader
|
312
|
+
|
313
|
+
has_many :cart_items, dependent: :destroy
|
314
|
+
|
315
|
+
has_many :cart, through: :cart_items
|
316
|
+
|
317
|
+
end
|
318
|
+
|
281
|
-
```
|
319
|
+
```
|
282
|
-
|
320
|
+
|
283
|
-
```
|
321
|
+
```
|
322
|
+
|
323
|
+
#user.rb
|
324
|
+
|
325
|
+
class User < ApplicationRecord
|
326
|
+
|
327
|
+
has_one :cart, dependent: :destroy
|
328
|
+
|
329
|
+
end
|
284
330
|
|
285
331
|
```
|
286
332
|
|
@@ -292,9 +338,19 @@
|
|
292
338
|
|
293
339
|
### 試したこと
|
294
340
|
|
295
|
-
|
296
|
-
|
297
|
-
|
341
|
+
下記の記述等を参考にしましたがうまくいきませんでした。
|
342
|
+
|
343
|
+
|
344
|
+
|
345
|
+
[rails カート機能の実装(多対多)NoMethodError](https://teratail.com/questions/204294?link=qa_related_pc)
|
346
|
+
|
347
|
+
[RailsでEC系に良く出てくるカート機能を解説 / 実装してみた](https://qiita.com/Doppon/items/3947c0027d9ea555cc39)
|
348
|
+
|
349
|
+
[Rails5でカート機能を作るためのロジックを作ってみた](https://qiita.com/Coolucky/items/89ce3a0f25c9dfdb38c1)
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
ルーティングや、コントローラーの設定、フォームの使い方などに関する理解の浅さこそが最大の原因であると思いますが、どうにも進めなくなってしまい、お力添えをお願いしたいです。
|
298
354
|
|
299
355
|
|
300
356
|
|
@@ -302,4 +358,4 @@
|
|
302
358
|
|
303
359
|
|
304
360
|
|
305
|
-
|
361
|
+
Rails 5.0.7.2
|