我尝试使用当前在每个请求上达到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
。
这是对的吗?我想确保我使用了首选方法。
答案 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处理,但这是基本的想法。