Giving Mailers, Observers and Sweepers Their Own Space in Rails

Code Samples From Video

config/environment.rb

%w(observers sweepers mailers).each do |dir|
  config.load_paths << "#{RAILS_ROOT}/app/#{dir}"
end

config.active_record.observers = :user_observer

app/mailers/application_mailer.rb

class ApplicationMailer < ActionMailer::Base
  self.template_root = File.join(RAILS_ROOT, 'app', 'mailers', 'views')
end

app/mailers/user_mailer.rb

class UserMailer < ApplicationMailer
  def invitation(user)
    subject     'Invitation'
    from        "do-not-reply@foobar.com"
    recipients  user.email
    body        :user => user
  end
end

app/observers/user_observer.rb

class UserObserver < ActiveRecord::Observer
  def after_create(user)
    UserMailer.deliver_invitation(user)
  end
end

Rails Tips Articles

Rails Quick Tips