Wednesday, 8 August 2007

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.

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.