Rails:如何在我的rails应用程序中查找已记录的用户?

时间:2014-06-26 13:15:36

标签: ruby-on-rails session login

用户登录时,我将用户ID保存到数据库session[:user_id]。我该怎么做才能找出登录用户的数量?

我使用 ActionDispatch::Session::CacheStore 进行会话存储。

请指导我实现目标的正确方法。

2 个答案:

答案 0 :(得分:3)

可能最好的解决方案是切换到使用Active Record Session存储。这很容易 - 你只需要添加(并运行)迁移来创建会话表。跑吧:

rake db:sessions:create

然后将会话存储配置添加到:config/initializers/session_store.rb,如下所示:

YourApplication::Application.config.session_store :active_record_store

一旦完成并重新启动服务器,Rails现在将会话存储在数据库中。

通过这种方式,您将能够使用以下内容获取当前登录用户数:

ActiveRecord::SessionStore::Session.count

虽然仅计算最近更新的数据会更准确 - 比如最后5分钟:

ActiveRecord::SessionStore::Session.where("updated_at > ?", 5.minutes.ago).count

根据您需要查询此值的频率,您可能需要考虑缓存值或在after create或after destroy回调中递增/递减缓存值,但这似乎有点过分。

答案 1 :(得分:0)

创建或销毁会话时,您可以尝试实现递增或递减的会话变量,并使用一些帮助程序来递增/递减计数器。

def sessions_increment
  if session[:count].nil?
    session[:count] = 0
  end
  session[:count] += 1
end
def sessions_decrement
  if session[:count].nil?
    session[:count] = 0
  end
  session[:count] -= 1
end