Why use an Observer for a single model rather than using a callback in the ActiveRecord object? They seem like they work identically. Is there a difference I'm missing? For example, these seem like they would do the same thing: class User < ActiveRecord::Base after_create :send_welcome protected def send_welcome UserMailer.send_welcome(self) end end class UserObserver < ActiveRecord::Observer def after_create(user) UserMailer.send_welcome(user) end end -- TW
on 2009-03-21 00:12
on 2009-03-21 02:16
Hi tekwiz, This is excerpt is from Agile Web Development with Rails: Callbacks are a ï¬ne technique, but they can sometimes result in a model class taking on responsibilities that arenâ€™t really related to the nature of the model. For example, on page 385 we created a callback that generated a log message when an order was created. That functionality isnâ€™t really part of the basic Order classâ€”we put it there because thatâ€™s where the callback executed. Active Record observers overcome that limitation. An observer transparently links itself into a model class, registering itself for callbacks as if it were part of the model but without requiring any changes in the model itself.
on 2009-03-21 02:53
Thanks elioncho! I understand that it is a best practice to separate certain functionality out of models into observers. I guess I should clarify my question... Is there any _technical_ reason to use observers instead of callbacks or visa versa. -- TW
on 2009-05-08 03:51
I'd really like to know the answer to that too!