我喜欢观察将一个对象添加到我的has_many关系中而不将它们保存到数据库中 因此,当我向我的订单添加LineItem时,我想调用Order :: calculate_total来更新实际总价值。
o = Order.new
o.line_items << LineItem.new # should call calculate_total from order-object
但是我的LineItem的构建方法没有观察者。
答案 0 :(得分:4)
我收回自己。我刚刚发现了关联回调:ActiveRecord::Associtions::ClassMethods,搜索“关联回调”。基本上:
class Order < ActiveRecord::Base
has_many :line_items, :after_add => :calculate_order_total
end
您还可以访问before_add,before_remove和after_remove。
答案 1 :(得分:0)
以不同的方式:
class Order < ActiveRecord::Base
def add_line_item(line_item)
self.line_items << line_item
self.calculate_total
end
end
但我质疑为什么你需要计算每次添加订单项的总数。如果您在添加所有订单项后仅计算一次,则可以实现相同目的。