包裹由费用,收入和余额组成,这些费用,收入和余额基于由金额构成的销售额。我如何将每个@sale.amount
加到@package.revenue
?
模型package.rb:
class Package < ActiveRecord::Base
has_many :sales
end
模特sale.rb:
class Sale < ActiveRecord::Base
belongs_to :package
end
routes.rb中:
Rails.application.routes.draw do
resources :packages do
resources :sales do
end
end
end
答案 0 :(得分:0)
class Package < ActiveRecord::Base
has_many :sales
def revenue
sales.map(&:amount).sum
end
end
答案 1 :(得分:0)
ActiveRecord有一个方便的sum
方法来计算列中值的总和:
class Package < ActiveRecord::Base
has_many :sales
def revenue
sales.sum(:amount)
end
end
请注意,虽然它看起来类似于sales.map(&:amount).sum
,但它的性能会大大提高,因为ActiveRecord会让数据库进行计算,然后从数据库中只检索单个值(最终总和),而另一种方法将从数据库中获取每个相关记录(其中可能有数千个),为每个记录实例化一个Sale对象,然后从每个Sale对象中获取amount
,最后计算总和。