2009-06-22 146 views
0

我有两个脚手架生成的模型:书和书包。一个书包有许多书,一本书属于一个书包。每本书都有一个重量,每个书包有一个平均重量,应该存储所有书籍的平均重量。保持平均重量保持最新状态的最佳方法是什么?更新家长模型更新儿童

在Bookbag上使用保存前过滤器不起作用,因为它不会在每次更新它所包含的书籍时被调用,并且我不想在每次更新书籍时更新平均重量,仅当书籍的重量变化。

回答

0

还有另一种解决办法,如果你能负担得起根据需要重新计算平均值。

class Bookbag < ActiveRecord::Base 
    has_many :books 

    def weight_average 
    self.books.average(:weight) 
    end 
end 

在这种情况下,您不需要任何回调,并且可以利用数据库的能力来进行计算。

3

一个快速的解决方案可能是沿着这些路线的东西:

class Book 
    def before_save 
    self.bookbag.update_avg if self.weight_changed? 
    end 
end