Ответ 1
Как насчет этого:
-
Создайте миграцию, чтобы добавить новое поле для пользователей, чтобы сохранить дату и время последнего посещения пользователя:
rails g migration add_last_seen_at_to_users last_seen_at:datetime
-
Добавьте обратный вызов до действия вашего контроллера приложения:
before_action :set_last_seen_at, if: proc { user_signed_in? } private def set_last_seen_at current_user.update_attribute(:last_seen_at, Time.current) end
Таким образом, при каждом запросе (т.е. активности), который выполняет текущий пользователь, его/ее последний вид в атрибуте обновляется до текущего времени.
Обратите внимание, однако, что это может занять некоторые из ваших ресурсов приложения, если у вас много пользователей, которые вошли в систему, потому что это будет выполняться перед каждым действием контроллера, запрошенным кем-то, кто вошел в систему.
Если производительность вызывает беспокойство, подумайте о добавлении к шагу 2 следующего механизма дроссельной заслонки (в этом примере дросселирование через 15 минут):
before_action :set_last_seen_at, if: proc { user_signed_in? && (session[:last_seen_at] == nil || session[:last_seen_at] < 15.minutes.ago) }
private
def set_last_seen_at
current_user.update_attribute(:last_seen_at, Time.current)
session[:last_seen_at] = Time.current
end