0
即時通訊設法保持計數的用戶登錄條紋(天)與設計。Rails - Devise - 用戶登錄條紋
向用戶表中添加了一個新的time_since_sign_in整數列。
壓倒一切的設計會話控制器
devise_for :users, controllers: { sessions: "sessions" }
添加了這個,我認爲會在
class SessionsController < Devise::SessionsController
def create
current_user.update_sign_in_streak
# even if i comment out super, last_sign_in_at still gets updated
super
end
end
添加到用戶模型
def update_sign_in_streak
# binding.pry
# at this point last_sign_in_at always updated
time_since_sign_in = Time.now - last_sign_in_at
if time_since_sign_in.between?(1.day, 2.day)
increment! :sign_in_streak
elsif time_since_sign_in > 2.day
sign_in_streak = 0
save
end
end
所以顯然設計更新標誌之前ATTR了這個鉤子,它更新跟蹤字段。但爲什麼它會在創建成功之前被調用?任何想法,我怎麼能得到這個工作?
Warden::Manager.after_set_user :except => :fetch do |record, warden, options|
if record.respond_to?(:update_tracked_fields!) && warden.authenticated?(options[:scope]) && !warden.request.env['devise.skip_trackable']
record.update_tracked_fields!(warden.request)
end
end
我不理解你。什麼不工作? – phoet
對不起。所以如果我停在update_sign_in_streak下的binding.pry中,last_sign_in_at已經由持久回調 – ndreckshage
更新,所以我設置的time_since_sign_in變量將始終爲0 /接近它 – ndreckshage