Skip to content

Instantly share code, notes, and snippets.

@patmaddox
Created November 4, 2009 20:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save patmaddox/226346 to your computer and use it in GitHub Desktop.
Save patmaddox/226346 to your computer and use it in GitHub Desktop.
# Typical way of handling the email in the controller
class UsersController < ApplicationController
def create
@user = User.new params[:user]
UserMailer.deliver_welcome(@user) if @user.save
end
end
class UserObserver < ActiveRecord::Observer
def after_create(user)
UserMailer.deliver_welcome user
end
end
class UsersController < ApplicationController
resource_controller
end
class User < ActiveRecord::Base
after_create :deliver_welcome_email
def deliver_welcome_email
UserMailer.deliver_welcome self
end
end
class UsersController < ApplicationController
def create
@user = User.new params[:user]
@user.signup
end
end
class User < ActiveRecord::Base
def signup
UserMailer.deliver_signup(self) if save
end
end
# Using the observer pattern (rather than Rails observers)
class UsersController < ApplicationController
def create
@user = User.new params[:user]
@user.add_observer(:created => lambda {|u| UserMailer.deliver_welcome(u) })
@user.save
end
end
# Using a service to remove duplication
class UsersController < ApplicationController
def create
@user = User.new params[:user]
UserService.signup @user
end
end
class Admin::UsersController < AdminController
def create
@user = User.new params[:user]
UserService.signup(@user)
end
end
class UserService
def self.signup(user)
UserMailer.deliver_welcome(user) if user.save
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment