如何在rails中正确缓存变量

时间:2010-12-08 16:37:12

标签: ruby-on-rails ruby-on-rails-3

您好我有一个rails应用程序,它在每个页面上始终显示公司名称。 由于登录用户可以拥有她所属的多家公司。 用户和公司存储在数据库中。 我使用authlogic进行用户管理。

现在我不希望在每次回发或页面更改时都访问数据库 在登录用户发生变化或用户选择其他公司之前,选择/存储公司的最佳做法是什么?类似于给定用户的全局实例变量。

我在我的application_controller

中开始使用它
def current_company
  return @current_company if defined?(@current_company)
  @current_company = Account.includes(:users).where(:users =>current_company)
end

我意识到我还在击中数据库...

会话是推荐的方式还是最佳实践...

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

|| =方式:

def current_company
  @current_company ||= Account.includes(:users).where(:users =>current_company)
end

记忆方式:

def current_company
  Account.includes(:users).where(:users =>current_company)
end
memoize :current_company

此方法与使用|| =

的正常记忆之间存在差异

http://apidock.com/rails/ActiveSupport/memoize#447-Differences-between-normal-or-assign-operator

@tadman,你说得对,但从我的观点来看,取决于你试图“缓存”的方法有多复杂。对于简单的情况,我更喜欢|| =

答案 1 :(得分:0)

我认为这就是你要找的东西 https://github.com/nkallen/cache-money