supaspoida (owner)

Fork Of

Revisions

gist: 228930 Download_button fork
public
Public Clone URL: git://gist.github.com/228930.git
Embed All Files: show embed
all_in_controller.rb #
1
2
3
4
5
6
7
# 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
ar_observer.rb #
1
2
3
4
5
class UserObserver < ActiveRecord::Observer
  def after_create(user)
    UserMailer.deliver_welcome user
  end
end
callbacks.rb #
1
2
3
4
5
6
7
8
9
10
11
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
intention_revealing_method.rb #
1
2
3
4
5
6
7
8
9
10
11
12
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
observer_pattern.rb #
1
2
3
4
5
6
7
8
# 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
service.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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