我有一个简单的电子商务应用程序,模型是User
和Order
。模型Order
有一个列status,指示带有status = 0
的订单是购物车的订单的状态。实际上,User
可以有多个购物车。但是一个用户只能有一个购物车。要实现此功能,我有以下模型。order.rb
STATUS_VALUES = { 'CART' => 0, 'CONFIRMED' => 1,'DELIVERED' => 2}
class Order < ApplicationRecord
belongs_to :user
has_many :order_items, inverse_of: :order
accepts_nested_attributes_for :order_items
end
user.rb:
class User < ApplicationRecord
has_secure_password
has_many :photos
has_many :orders
has_one :cart
end
此外,我还创建了模型Cart
,其中cart.rb:
class Cart < Order
self.table_name = "orders"
default_scope { where("orders.status = 0") }
end
通过这个实现,我能够: 1.让用户一次只允许构建一个购物车。两个连续的user.build_cart
将不起作用。太完美了,这正是我想要的。我的问题是,你可以user.orders.build(状态: 0)将允许工作,无论我已经有多少购物车。我的目标是阻止创建订单,以便只允许构建购物车。然后,可以通过更改状态列将购物车更新为非购物车。我如何在Rails中做到这一点?
发布于 2019-09-01 14:30:42
构建cart的最好方法是将它们保存在会话变量中,而不是数据库中。你可以通过快速搜索找到解决方案。
https://stackoverflow.com/questions/57746497
复制相似问题