Forum: Ruby on Rails Observers or callbacks?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
tekwiz (Guest)
on 2009-03-21 01:12
(Received via mailing list)
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
Elias O. (Guest)
on 2009-03-21 03:16
(Received via mailing list)
Hi tekwiz,

This is excerpt is from Agile Web D. with Rails:

Callbacks are a fine 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.
tekwiz (Guest)
on 2009-03-21 03:53
(Received via mailing list)
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
Zubin H. (Guest)
on 2009-05-08 05:51
(Received via mailing list)
I'd really like to know the answer to that too!
This topic is locked and can not be replied to.