Ruby on rails 4 计算Rails中的订单总数

Ruby on rails 4 计算Rails中的订单总数,ruby-on-rails-4,Ruby On Rails 4,我试图在Rails的订单模型中计算总计,但遇到了一点麻烦。讨论有帮助,但不太适用于我的情况 基本上,用户可以选择添加到订单中的产品,然后保存为订单产品。我有以下模型(仅提及相关字段): 对项目求和以创建订单总额的最佳方式是什么?显然,你不能只是在订单右边传递一个隐藏的字段,因为有人可以操纵它。我在考虑这样做: class Order has_many :order_products accepts_nested_attributes_for :order_products befor

我试图在Rails的订单模型中计算总计,但遇到了一点麻烦。讨论有帮助,但不太适用于我的情况

基本上,用户可以选择添加到订单中的产品,然后保存为订单产品。我有以下模型(仅提及相关字段):

对项目求和以创建订单总额的最佳方式是什么?显然,你不能只是在订单右边传递一个隐藏的字段,因为有人可以操纵它。我在考虑这样做:

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”函数,而应该循环查看订单产品并从产品模型中查找价格?当然,这是一种非常常见的情况——我的做法正确吗

此外,考虑到产品价格可能会发生变化,在订购时是否最好也将每个产品的价格存储在订单产品表中?在这种情况下,我是否只需在OrderProduct模型中添加另一个before_save函数,从产品模型中查找当前价格,将其乘以数量并保存为产品总价值

最后,如果一个产品被删除了,当有订单产品引用它时会发生什么?这会引起问题吗?或者,如果我在订购时在order_products表中缓存了必要的产品数据,我是否可以


谢谢

我已经将它与以下内容结合使用,但不确定这是否是最好的方法

def calc_totals
  self.total = 0
  order_products.each do |op|
    self.total += op.product.price * op.qty
    op.item_price = op.product.price
    op.item_total = op.product.price * op.qty
  end
end
def calc_totals
  self.total = 0
  order_products.each do |op|
    self.total += op.product.price * op.qty
    op.item_price = op.product.price
    op.item_total = op.product.price * op.qty
  end
end