我有一个类Car和一个类似于下面的类Part。这两个类都有一个属性'price'。现在汽车的价格是所有零件价格的总和。此外,如果没有价格的零件,即如果汽车的一个或多个零件的价格为零,那么汽车的价格将设为零。
Class Car
has_many :parts
before_save :calculate_price
private
def calculate_price
# calculate the price of car by summing all parts prices.
end
end
Class Part
belongs_to :car, inverse_of: parts
end
问题
每当零件的价格发生变化时,我想重新计算汽车的价格。现在为此我添加了一个before_save回调,但回调在部分对象保存之前运行,当我self.parts
它从数据库加载部件对象而不是从内存加载它们因此我没有得到更新价格的价值。如何在保存关联的子对象后运行before_save或从内存加载子对象?
答案 0 :(得分:0)
您还需要将回调放入Part
模型,因为您想对零件的价格变化做出反应,对吧?类似的东西:
class Part
before_save :update_car_price
def update_car_price
self.car.touch if self.car.present?
end
end
未经过测试,但我认为touch
应该足够了,您不必公开calculate_price
的{{1}}。
警告:如果您对汽车和零件进行大量的价格更新,这可能会非常难看。