Rails: how to show user's “last seen at” time?

前端 未结 2 465
北恋
北恋 2021-01-31 10:17

I\'m using devise which stores current_sign_in_at and last_sign_in_at datetimes.

But lets say a user logged in a month ago but last vie

2条回答
  •  无人共我
    2021-01-31 10:40

    To improve performance of the previous answer:

    • don't use session, as user already loaded with warden and all the attributes are accessible
    • update_attribute runs callbacks and updates updated_at attribute, and update_column not
    • to improve performance, better to use background workers, like ActiveJob/Resque/Sidekiq
    • to prevent from the high DB locking, better to create a seperate table, associated with users table, and write accesses there

    Updated code:

    before_action :set_last_seen_at, if: proc { user_signed_in? && (user.last_seen_at.nil? || user.last_seen_at < 15.minutes.ago) }
    
    private
    def set_last_seen_at
      current_user.update_column(:last_seen_at, Time.now)
    end
    

    Devise plugin makes similar behaviour happen (just last seen, without optimizations): https://github.com/ctide/devise_lastseenable

提交回复
热议问题