我有一个has_many销售的包装型号。
我想总结所有的销售收入和更新包装模型的total_revenue后,每次新的销售。
我该怎么做?
发布于 2015-10-26 00:01:58
您想要使用活动记录回调。我可能会使用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这允许您在每次创建新的销售时运行代码。
发布于 2015-10-26 00:02:10
要实现这一点,一种简单的方法是使用如下设置:
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,但随后您将从多个执行上下文修改一个全局状态。
尽管如此,如果您编写这样的逻辑,您将最终得到fat模型,在一个大的应用程序中很难管理。
不如用中介对象代替呢?
https://stackoverflow.com/questions/33336489
复制相似问题