0

我尝试优化一个负载很大的 Rails 应用程序,该应用程序当前在每个请求上都会命中数据库。我现在尝试通过在会话中保存一些信息来优化它,这样我就不需要每次都去数据库了。我目前正在做这样的事情。

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

session[:audience]然后在我的控制器和视图上的任何地方调用。似乎很好,只是我在 New Relic 日志中看到有时没有设置会话,因此应用程序得到一个讨厌的 nil。

我想得更好,我应该使用实例变量,也许更多这样的东西。

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

然后调用@audience我的应用程序。

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

4

1 回答 1

1

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

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

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

于 2013-07-08T22:30:06.907 回答