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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

2385閲覧

NoMethodError を解決させたい

kan1m1souma

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/12/09 06:20

NoMethodError in Customers::OrdersController#create
undefined method `cart_items' for #Customer:0x00000000043c4f48 Did you mean? cart_ids
@cart_items = current_customer.cart_items
上記のエラーが発生しております。@cart_items = current_customer.cart_itemsの部分でエラーが発生していると思い、コントローラーを確認したのですが、何が間違っているのかが分かりません。Rails初心者です。よろしくお願いします。

エラー画面

NoMethodError in Customers::OrdersController#create undefined method `cart_items' for #<Customer:0x00000000043c4f48> Did you mean? cart_ids

view画面

<%= form_with model: @order, url: orders_path, method: :post, local: true do |f| %> <%= f.hidden_field :total_price, value: @total %> <%= f.submit "注文を確定する" %> <% end %>

Orderコントローラー

class Customers::OrdersController < ApplicationController def new @order = Order.new @cart_item = CartItem.where(customer_id: current_customer.id) @customer = current_customer end def create @cart_items = current_customer.cart_items @order = current_customer.order.new(order_params) if order.save @cart_items.each do |cart_item| order_item = OrderItem.new order_item.item_id = cart_item.item_id order_item.order_id = @order.id order_item.tax_price = cart_item.item.price order_item.number_of_piaces = cart_item.pieces order_item.save end redirect_to orders_complete_orders_path @cart_items.destroy.all else @order = Order.new(order_params) render.new end end def index @orders = current_customer.orders end def show @order = Order.find(params[:id]) @ordered_items = @order.order_items @cart_items = current_customer.cart_items.all end def complete end private def order_params params.require(:order).permit(:customer_id,:logged_out_on, :total_price, :payment_method, :receiver_name, :shipping_postal_code, :delivery_address, :order_status) end end

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

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

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

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

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

guest

回答1

0

ベストアンサー

何が間違っているのかが分かりません。

エラーメッセージのとおり、Customercart_itemsがありません。

  • メソッド名を間違えている
  • current_customerが想定外のオブジェクトだった

など、可能性はいくつか考えられます。(コントローラーだけでなく)Customerの定義を確認してみましょう。

投稿2021/12/09 06:42

maisumakun

総合スコア146018

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

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

kan1m1souma

2021/12/09 06:56

ありがとうございます。モデルに記述し忘れていました。無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問