С новой версией Devise он работает следующим образом, чтобы иметь точный статус онлайн / офлайн:
вставьте это в свой application_controller:
before_filter :last_request
def last_request
if user_signed_in?
if current_user.last_request_at < 1.minutes.ago
current_user.update_attribute(:last_request_at, Time.now)
end
if current_user.currently_signed_in = false
current_user.update_attribute(:currently_signed_in, true)
end
end
end
При каждом действии приложение проверяет,последний запрос был более 1 минуты назад, если да, он обновляет атрибут пользователя.
поместите это в user.rb:
before_save :set_last_request
Warden::Manager.after_authentication do |user,auth,opts|
user.update_attribute(:currently_signed_in, true)
end
Warden::Manager.before_logout do |user,auth,opts|
user.update_attribute(:currently_signed_in, false)
end
def set_last_request
self.last_request_at = Time.now
end
def signed_in?
if self.currently_signed_in
if self.timedout?(self.last_request_at.localtime)
return false
else
return true
end
else
false
end
end
, затем вы можете использовать подписанный_интерфейс?способ определения статуса пользователя в сети.