将值从子类传递给父类

时间:2015-07-02 03:37:17

标签: ruby-on-rails

包裹由费用,收入和余额组成,这些费用,收入和余额基于由金额构成的销售额。我如何将每个@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

2 个答案:

答案 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,最后计算总和。