如何用Rails计算订单的总价?

时间:2015-08-01 16:08:16

标签: ruby-on-rails ruby

我按顺序建立了订单清单:

order.rb

has_many :line_products

LineProduct.rb

belongs_to :order
belongs_to :product

并且具有count的值和产品的关系(这是它获得价格的地方)。

所以它是这样的:

product #1 has a price of $ 5.00
product #2 has a price of $ 3.50

line_product #1 has a count of 3 (so that's 3*5=15 USD)
line_product #2 has a count of 6 (so that's 6*3.50=21 USD)

我需要,对于订单显示视图,计算15 and 21的总和,我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以枚举关联集合,并使用reduce之类的方法来计算总和:

class Order < ActiveRecord::Base
  has_many :line_products

  def total_price
    @total_price ||= line_products.includes(:product).reduce(0) do |sum, l_prod|
      sum + (l_prod.count * l_prod.product.price)
    end
  end
end

请记住:

  • 急切加载与.includes(:product)的嵌套关联,以最大限度地减少数据库查询的数量,
  • 使用@ivar ||=记住返回值,这样您每次查询同一个对象时都不必重新计算它。

答案 1 :(得分:0)

为LineProduct创建sum方法

def sum
  product.price * count # I believe you have count/price validations in place
end

order.line_products.map(&:sum).inject(:+)

inject(:+)用于总结