Borja Martín wrote:
Hi,
first of all I would like to wish a happy new year to all the list
members.
Here is my problem. I have a model class where I need to overwrite an
accessor method in order to add some extra behaviour:
class LineItem < ActiveRecord::Base
belongs_to :item, :polymorphic => true
# add_item
#
def item=(item)
write_attribute(:item, item)
self.price = item.price
end
# item
#
def item
read_attribute(:item)
end
end
What you need are association callbacks. The following is from the
ActiveRecord::Association::ClassMethods Page in the RDoc:
Association callbacks
Similiar to the normal callbacks that hook into the lifecycle of an
Active Record object, you can also define callbacks that get trigged
when you add an object to or removing an object from a association
collection. Example:
class Project
has_and_belongs_to_many :developers, :after_add =>
:evaluate_velocity
def evaluate_velocity(developer)
...
end
end
It‘s possible to stack callbacks by passing them as an array. Example:
class Project
has_and_belongs_to_many :developers, :after_add =>
[:evaluate_velocity, Proc.new { |p, d| p.shipping_date = Time.now}]
end
Possible callbacks are: before_add, after_add, before_remove and
after_remove.
Should any of the before_add callbacks throw an exception, the object
does not get added to the collection. Same with the before_remove
callbacks, if an exception is thrown the object doesn‘t get removed.