【发布时间】:2021-11-02 16:07:30
【问题描述】:
我正在构建一个简单的电子商务网页,我想要创建的功能是:
用户在其中一个产品中单击“添加到购物车”按钮 --> 使用 user_id 创建 ORDER --> 使用 order_id 和 product_id 创建 ORDER_ITEM。
我想在 OrderItem 模型中构建所有逻辑:
class OrderItem < ApplicationRecord
belongs_to :order
belongs_to :product
before_validation :generate_order
private
def self.generate_order(user)
if Order.find_by(status: 1)
order = Order.find_by(status: 1)
else
order = Order.new(status: 1, total: 0, subtotal: 0, date: Date.today())
order.user = user
order.save!
end
return order
end
end
基本上,如果有一个订单打开(状态 = 1)然后返回该订单,如果没有创建一个。
在 OrderItem 控制器中:
class OrderItemsController < ApplicationController
def create
@product = Product.find(params[:product_id])
@order = OrderItem.generate_order(current_user)
@order_item = OrderItem.new
@order_item.product = @product
@order_item.order = @order
if @order_item.save!
redirect_to cart_path
else
redirect_to root_path
end
end
def delete
end
end
一切顺利,直到它到达 .save!抛出此错误的点:
undefined method `generate_order' for #<OrderItem:0x00007fe8f77552c8>
我检查了日志,一切似乎都创建得很好:
>> @order_item
=> #<OrderItem id: nil, order_id: 1, product_id: 65, created_at: nil, updated_at: nil>
>> @order
=> #<Order id: 1, subtotal: 0, total: 0, date: "2021-09-05 00:00:00", user_id: 5, created_at: "2021-09-05 00:00:12", updated_at: "2021-09-05 00:00:12", status: 1>
>> @product
=> #<Product id: 65, name: "Shou Mei", description: "Sequi dolores facilis rerum quo odit veritatis ips...", price: 5893, rating: 5, user_id: 13, created_at: "2021-09-03 23:54:46", updated_at: "2021-09-03 23:54:47", availability: 2>
为什么会抛出该错误,我该如何解决?谢谢!
【问题讨论】:
标签: ruby-on-rails model-view-controller private-methods