我按顺序建立了订单清单:
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
的总和,我该怎么做?
答案 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(:+)
用于总结