class ApplicationController < ActionController::Base
def current_user
User.find(session[:user_id])
end
end
上面的方法用于获取当前用户,调用User的find方法传入会话中的user_id从数据库中获取当前登录用户实体,如果该方法被调用多次,就意味着需要访问多次数据库,我们通过将第一次调用的结果缓存在实例变量中供下次使用的方法,来防止重复访问数据库。
@current_user ||= User.find(session[:user_id])
注意||符号,当第一次调用时,@current_user为空,需要访问数据库;当后续调用该方法时,实例变量中保存已经保存了当前用户信息,不再需要访问数据库,增加速度,提升了性能。
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
class ApplicationController < ActionController::Base
def current_user
@current_user ||= User.find(session[:user_id])
end
end
原文链接:http://railscasts.com/episodes/1-caching-with-instance-variables