2013-02-26 19 views

回答

1

你可以通过在你的表格中定义额外的字段say status来做到这一点,例如users

所以,当任何用户得到logged in,你必须设置这个领域的状态,如说,在线。

然后在您的控制器的创建方法你只需做到以下几点:

User.create(:status => "online", #other params go here) 

你也可以定义新的注册用户与身份说,offline

这个你可以这样做在用户注册的时间做:

User.new(:status => "offline", #other params go here) 

然后找到登录的用户,你可以这样做:

@online_users = User.where(:status => "online") 

UPDATE:

对于没有点击注销按钮的用户,上述想法不起作用。

所以你必须将这个想法与Jugernaut之类的东西结合起来,然后定期发送ping来知道用户是否还在那里。

+0

雅。精湛的想法..我在等待一些更多的答案,如果别人不适合我会接受你的答案。给出+1 – 2013-02-26 12:34:08

+1

你不知道什么时候用户离线,ussaly没有人点击注销btn ..需要像last_activity时间一些字段,并检查此字段的状态可能 – 2013-02-26 12:48:17

+0

何时更新此last_activity时间?你能解释一下吗?否则发布一个新的答案.. – 2013-02-26 12:56:57

2

那么首先你需要使用CookieStore以外的其他东西作为你的会话后端。如果你使用ActiveRecord,你应该能够相对容易地查询所有当前登录的用户。

我不知道这个宝石,但这听起来并不像你需要的那样。

+0

是什么?的CookieStore你能简单地解释一下吗.. – 2013-02-26 09:09:45

+1

默认情况下,Rails将会话信息存储在cookie中。意味着只有你知道你的会话数据,服务器除非客户端通过这些信息才知道任何事情。这也意味着服务器不知道存在的所有cookie(即所有存在的会话),并且不可能对它们进行计数。 http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html – 2013-02-26 09:24:15

+0

雅。好主意..我在等待一些更多的答案,如果别人不适合我会接受你的答案。给予+1 – 2013-02-26 12:35:23

1

这真的取决于您用于登录系统的哪个宝石。

如果使用Authlogic,我不记得确保所有被用户模型创建的领域,但我相信你可以与搜索不喜欢在名字范围界定和搜索last_request_at是在少于5-10分钟。

如果您正在使用设计的,如果你特别想使用的宝石,你可以用这个尝试: https://github.com/ctide/devise_lastseenable

相关问题