观察主动记录关系

时间:2010-02-19 10:08:45

标签: ruby-on-rails activerecord

我喜欢观察将一个对象添加到我的has_many关系中而不将它们保存到数据库中 因此,当我向我的订单添加LineItem时,我想调用Order :: calculate_total来更新实际总价值。

o = Order.new
o.line_items << LineItem.new # should call calculate_total from order-object

但是我的LineItem的构建方法没有观察者。

2 个答案:

答案 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

但我质疑为什么你需要计算每次添加订单项的总数。如果您在添加所有订单项后仅计算一次,则可以实现相同目的。