开发者

observe activerecord relations

开发者 https://www.devze.com 2022-12-20 12:16 出处:网络
I like to observe adding an object to my has_many relation without saving them to the database. So when I add a LineItem to my Order I like to call Order::calculate_total to update the actual total va

I like to observe adding an object to my has_many relation without saving them to the database.

So when I add a LineItem to my Order I like to call Order::calculate_total to update the actual total value.

o = Order.new

o.line_items << Line开发者_Go百科Item.new # should call calculate_total from order-object

but there are no observers for the build-method of my LineItem.


I retract myself. I just found out about association callbacks: ActiveRecord::Associtions::ClassMethods, search for "Association callbacks". Essentially:

class Order < ActiveRecord::Base
  has_many :line_items, :after_add => :calculate_order_total
end

You also have access to before_add, before_remove and after_remove.


Do it differently:

class Order < ActiveRecord::Base
  def add_line_item(line_item)
    self.line_items << line_item
    self.calculate_total
  end
end

But I question why you need to calculate the total on each add of the line item. The same can be achieved if you calculate only once after adding all line items.

0

精彩评论

暂无评论...
验证码 换一张
取 消