我有一个包含很多销售的包装模型。
我想总结所有销售收入,并在每次新销售后更新套餐模型的总收入。
我该怎么做?
答案 0 :(得分:1)
您想使用active record callback。我可能会使用after_create
。您可以添加以下代码:
class Sale < ActiveRecord::Base
belongs_to :package
after_create :update_package_revenue
def update_package_revenue
package.update(total_revenue: package.sales.sum(:revenue)) # substitute the correct code here
end
end
这使您可以在每次创建新销售时运行代码。
答案 1 :(得分:0)
实现这一目标的简单方法是使用以下设置:
class Package < ActiveRecord::Base
has_many :sales
def calculate_and_update_total_revenue
update_attributes(:total_revenue, sales.sum(:revenue))
end
end
class Sales < ActiveRecord::Base
belongs_to :package
after_create :update_parent_package
private
def update_parent_package
package.calculate_and_update_total_revenue
end
end
它为您提供了一个竞争条件抵抗方法来突破总数(您可以为每个新的销售添加+self.revenue
,但之后您将修改全局来自多个执行上下文的状态。
但是,如果你写这样的逻辑,你最终会得到胖模型,真的很难在大型应用程序中管理。
如何使用mediator对象呢?