使用会话以避免在rails中访问数据库的首选方法

时间:2013-07-08 21:33:21

标签: ruby-on-rails

我尝试使用当前在每个请求上达到databsae的大负载来优化Rails应用程序。我现在尝试通过在会话上保存一些信息来优化这一点,所以我不需要每次都去数据库。我现在正在做这样的事情。

def set_audience
  if current_user
    session[:audience] ||= current_user.audience
  else
    session[:audience] ||= 'general'
  end
end

然后在我的控制器和视图上的任何位置调用session[:audience]。看起来很好,除了我在New Relic日志上看到有时会话没有设置因此应用程序得到一个讨厌的零。

我想更好,我应该使用实例变量,也许更像是这样。

def set_audience
  if current_user
    session[:audience] ||= current_user.audience
  end
  @audience = session[:audience]
  @audience = 'general' if @audience.empty?
end

然后在我的应用中调用@audience

这是对的吗?我想确保我使用了首选方法。

1 个答案:

答案 0 :(得分:1)

我认为这里的标准方法是在ApplicationContoller上使用辅助方法:

class ApplicationController < ActionController::Base
  private
  def current_audience
    @current_audience ||= current_user.audience
  end
  helper_method :current_audience
end

这与控制器和视图中的current_user辅助方法非常相似。根据应用程序的具体情况,您可能希望添加一些更强大的nil处理,但这是基本的想法。