我有两个脚手架生成的模型:Book和Bookbag。书包有许多书籍,书籍属于书包。每本书都有一个重量,每个书包的平均重量应该存储其所有书籍的平均重量。保持平均体重最新的最佳方法是什么?
在Bookbag上使用保存前过滤器不起作用,因为它对包含的书籍的每次更新都没有调用,并且我不想更新每次书籍更新的平均权重,只有当书籍的权重发生变化时才会更新
答案 0 :(得分:3)
快速解决方案可能是这样的:
class Book
def before_save
self.bookbag.update_avg if self.weight_changed?
end
end
答案 1 :(得分:0)
如果您能够根据需要重新计算平均值,还有另一种解决方案。
class Bookbag < ActiveRecord::Base
has_many :books
def weight_average
self.books.average(:weight)
end
end
在这种情况下,您不需要任何回调,并利用数据库的能力进行计算。