0
메신저로 사용자 로그인 수를 유지하려고 시도하는 중입니다.Rails - Devise - User Sign In Streak
사용자 테이블에 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