我們希望能在一個使用者帳號被建立的時候初始化一些資料,最好的時間點就是當使用者完成註冊確認的時候。
devise在3.1.2之後在Devise::Confirmable
有提供一個method叫after_confirmation
。你可以override它如下:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
def after_confirmation
# do something...
end
end
不過這樣的做法有個缺點就是每次使用者更改email重新做confirmation的時候都會再做一次,這顯然不是我們想要的。比較好的做法是overrideconfirm!
這個method,並且在method中檢查confirmed_at是否已經存在過來判斷是不是第一次做confirmation,程式如下:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
def confirm!
super
if first_confirmation?
# do something...
end
end
private
def first_confirmation?
previous_changes[:confirmed_at] && previous_changes[:confirmed_at].first.nil?
end
end