我正在尝试在 Rails 的订单模型中计算总数,但遇到了一些麻烦。这里的讨论有帮助,但并不完全适用于我的情况。
基本上,用户可以选择添加到他们订单中的产品,然后保存为 order_products。我有以下模型(仅提及相关字段):
#products table has fields name, price
class Product
end
#orders table has field total
class Order
has_many :order_products
accepts_nested_attributes_for :order_products
end
#orderproducts table has fields order_id, product_id, qty
class OrderProduct
belongs_to :order
belongs_to :product
end
汇总项目以创建订单总额的最佳方法是什么?显然,您不能只在订单表单上传递一个隐藏字段,因为有人可以操纵它。我正在考虑做这样的事情:
class Order
has_many :order_products
accepts_nested_attributes_for :order_products
before_save :calc_total
def calc_total
self.total = order_products.product.sum(&:price)
#or should this be order_products.sum(&product.price) or similar?
end
end
但这看起来不像是正确的语法。也许我不能使用“sum”函数,而应该循环遍历 order_products 并从 Product 模型中查找价格?当然,这是一个很常见的场景——我是否以正确的方式去做?
另外,鉴于产品价格可能会发生变化,是否最好在订购时将每种产品的价格也存储在订购产品表中?在这种情况下,我是否只需在 OrderProduct 模型中添加另一个 before_save 函数,从 Product 模型中查找当前价格,将其乘以 qty 并保存为 product_total 值?
最后,如果一个产品被删除,当有 order_products 引用它时会发生什么?这会导致问题吗?或者,如果我在订购时将必要的产品数据缓存在 order_products 表中,我可以吗?
谢谢!