ruby-on-rails - 如何跟踪一个用户在线的时间?使用 Ruby on Rails

标签 ruby-on-rails devise

我有一个 rails 使用 Devise 对用户进行身份验证的应用程序,但我想跟踪平台中用户的在线时间。我希望在用户表中有一个列,可以为该用户节省在线时间(小时、分钟......)。例如,一个用户总共在线 2 小时,另一个用户 15 分钟......

是否存在此功能的一些 gem 或 Devise 方法?

提前致谢。

最佳答案

DEVICE专卖店 last_sign_in_at一旦用户登录帐户并成为 online .

你可以做这样的事情。

添加 migration更改用户表并添加字段,total_online_time
rails g migration add_total_online_time_to_users total_online_time:Float

向您的应用程序 Controller 添加一个 before action 回调以检查用户操作:

before_action :set_online_time, if: proc { user_signed_in? }

在这个方法中,我会得到 last_sign_in_at由于我有当前时间,我将获得这些时间的差异并存储在 DB 中。作为分钟和秒。

再次,如果他登录,我会将这个时间添加到旧时间。

目前我正在保存分秒。由于我不能直接添加两次。

编辑:

我节省了几分钟,因为如果我们将字符串或时间保存在数据库中,我们无法在旅途中添加最后一个值和当前值。所以就是这样。

def set_online_time

  start_time = current_user.last_sign_in_at.to_time;
  end_time = Time.now;

  if(start_time && end_time)_
      minutes = time_diff(start_time, end_time)
      if(current_user.total_online_time)
        minutes = current_user.total_online_time + minutes
      current_user.update_attribute(:total_online_time, minutes)
  end  

end

这是操纵时间的方法:
private


def time_diff(start_time, end_time)
    (start_time -  end_time) / 60
end

现在,从 DB 检索分钟并转换为 HH:MM:SS

这是方法,

Time.at(seconds).utc.strftime("%H:%M:%S")

所以, Time.at((current_user.total_online_time) * 60).utc.strftime("%H:%M:%S") 是你的。

这是一个例子:
time1 = Time.now   => 2017-01-27 18:01:42 +0530

time2= Time.now - 4.hours  => 2017-01-27 14:02:02 +0530

minutes = time_diff(time1,time2)  => 239.66325946553334

Time.at((minutes) * 60).utc.strftime("%H:%M:%S") => "03:59:39"

So, "03:59:39" is the online time.

注:

1)每当用户登录时,此答案都会不断增加用户的在线时间。

2)如果你只想要最后一次,只需使用,
minutes = time_diff(start_time, end_time)
current_user.update_attribute(:total_online_time, minutes)

您还可以增加一个字段并节省当前的在线时间。

关于ruby-on-rails - 如何跟踪一个用户在线的时间?使用 Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892204/

相关文章:

ruby-on-rails - Rails 一个数据库与多个应用程序/域

ruby-on-rails - Rails 3 with Devise for Authentication - 如何手动创建用户?

ruby-on-rails - 动态 URL -> Rails 中路由的 Controller 映射

ruby-on-rails - rails 4 : Set enum field through FactoryGirl attributes

ruby-on-rails - 当设计路由在范围内定义时,未定义的局部变量或方法 `current_user'

ruby-on-rails - rails 3 + 设计 : how to modify the mailer method for confirmation emails to add user's second email address

ruby-on-rails - 将哈希常量克隆到新变量中,而不会在使用 .each block 更新时改变常量?

ruby-on-rails - 索引:正确vs外键:正确(Rails)

ruby-on-rails - 设计 5 : How do I modify the Flash messages from Devise to match my css for flash messages?

ruby-on-rails - Rails + Devise-有什么方法可以禁止用户登录,以便他们无法登录或重置密码?