Model

1
2
3
4
5
6
7
8
9
10
11
12
13
class User
  attr_accessor :password_confirmation
  validates_confirmation_of :password

  def self.inactive
    all(:active => false)
  end

  def activate!
    active = true
    save
  end
end

Action

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def activate_post(user, _submit_activate = nil, _submit_cancel = nil)
  return redirect(url(:home), :message => "Activation Cancelled") if _submit_cancel

  # Look for an inactive user with the token provided.
  @user = User.inactive.first(:token => user[:token])

  return render(:activate, :error => "No user found for this code") unless @user

  @user.attributes = user

  if @user.activate!
    session.user = user
    send_mail(:account_activated, {}, {:user => user})

    redirect(url(:home), :message => "Your account is activated and you are logged in!")
  else
    # User will have validation errors for password, etc.
    render :activate
  end
end