gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:21:23 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com