在常量中存储有关current_user的信息,以避免不必要的db命中 - rails

时间:2014-07-17 17:42:07

标签: postgresql activerecord ruby-on-rails-4

我有很多方法可以获取有关当前用户的信息,例如:

  current_user.is_admin?
  current_user.is_student?
  current_user.is_teacher?

这些方法需要评估current_user(has_many:accounts)是否具有相应角色的帐户(学生,管理员等)。

我可以在数据库中创建一些东西来巩固它,但这似乎是不必要的。

在登录时是否存在定义true或false的rails方式,然后能够在不查询的情况下引用?换句话说,def is_admin?将在user_session创建时定义为具有true / false值的常量。而且,我永远不必再次查询用户帐户以阻止他们是否是管理员。

2 个答案:

答案 0 :(得分:1)

您可以使用会话存储

def role
    session[:role] ||= 'student'
end

def is_admin?
    role == 'admin'    
end

但是它太小了,将它保存在数据库中不会受到伤害,而且无论如何你都有机会从数据库中检索大部分请求。

答案 1 :(得分:0)

Rails有一个答案。

第1步

进入session_store.rb初始化程序并更改默认值:

  Rails.application.config.session_store :cookie_store, key: xxxx

 Rails.application.config.session_store :active_record_store, key: xxx

然后,使用以下命令添加一个表来存储数据库中的会话数据:

 rake db:sessions:create