質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

4396閲覧

railsでカート機能の作成で詰まっています。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/01/20 10:18

編集2022/01/12 10:55

現在、railsでecサイトを作成していて、その中でカートの機能を実装中なのですが、詰まっているのでご質問させていただいきます。

現在、リンク内容こちらのキータを参考にカートを作成しています。

今やりたくてできないことは、カートボタンを押した際に、postでその選んだ商品名と数量を、cart_itemテーブルに保存したいのですが、

cartcontroller

1class CartsController < ApplicationController 2 before_action :setup_cart_item!, only: [:add_item, :update_item, :delete_item] 3 4 def show 5 @cart_items = current_cart.cart_items 6 end 7 8 # 商品一覧画面から、「商品購入」を押した時のアクション 9 def add_item 10 if @cart_item.blank? 11 @cart_item = current_cart.cart_items.build(product_id: params[:product_id]) 12 end 13 14 @cart_item.quantity += params[:quantity].to_i 15 @cart_item.save 16 redirect_to current_cart 17 end 18 19 def update_item 20 @cart_item.update(quantity: params[:quantity].to_i) 21 redirect_to current_cart 22 end 23 24 def delete_item 25 @cart_item.destroy 26 redirect_to current_cart 27 end 28 29 private 30 31 def setup_cart_item! 32 @cart_item = current_cart.cart_items.find_by(product_id: params[:product_id]) 33 end 34end

イメージ説明
上記のように、cart_itemsメソッドが定義されてないとエラーが出されるのですが、上記の参考キータ記事のように、cart_itemモデルを作成して、cartモデルとのリレーション関係を記入しました(belogs_to,has_many)。

なぜ、上記の関係を定義しているのにcart_controller内で、cart_itemsメソッドが使えないのでしょうか?

長くなりましたが、ご回答お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsuand

2019/01/21 02:40

よくエラーメッセージを見ましょう。Integer 41 に cart_items メソッドなんてないです。参照記事も不十分です。cart_item が存在しなかったら、またエラーになりますよ。
退会済みユーザー

退会済みユーザー

2019/01/21 08:43 編集

cart_itemというメソッドも定義しなければいけないのでしょうか? cart_itemモデルが存在していれば、このメソッドは自動で生成されると思っていたのですが、、
matsuand

2019/01/21 09:28

cart_items というメソッドは Cart クラスにおいて(自動)定義されるものです。エラーをもう一度よく確認してください。エラーは Integer クラスに対して cart_items メソッドを実行しています。current_cart というメソッドが Integer を返していると想像されます。なぜそうなったのか、確認してみてください。
退会済みユーザー

退会済みユーザー

2019/01/21 10:01

current_cartメソッドの中でcart_idを@cartに入れているからでしょうか?(cart_idがintegerなので) 結局、レコードに対して、cart_itemsメソッドを実行すればいいのでしょうか? なんか、わかりそうでわからないです。。
matsuand

2019/01/21 10:04

まず current_cart メソッドの定義を(ファイル内すべてを)お示しください。また参考URLの通りに実施しているのか、いないならどこがどう違うのか、お示しください。
退会済みユーザー

退会済みユーザー

2019/01/21 10:08

Screen Shot 2019-01-21 at 19.06.13 全て参考URLどうりに行っています。。
退会済みユーザー

退会済みユーザー

2019/01/21 10:12 編集

class ApplicationController < ActionController::Base protect_from_forgery with: :exception include SessionsHelper helper_method :current_cart def current_cart if session[:cart_id] @cart = Cart.find(session[:cart_id]) else @cart = Cart.create session[:cart_id] = @cart.id end end end
退会済みユーザー

退会済みユーザー

2019/01/21 10:11

current_cartの中身です。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問