Caching with Instance Variables 缓存与实例变量

class ApplicationController < ActionController::Base

  def current_user

     User.find(session[:user_id])
   end
end

上面那段代码的意思是定义一个current_user的方法,函数的作用是调用User中的find方法传入会话中的user_id从数据库读取当前登录大的用户信息。如果这个方法被多次调用,将会多次访问数据库,可以定义一个实例变量,将第一次调用时候的结果缓存到实例变量中供下次调的时候使用可以解决重复数据库访问的问题

   改写为:@current_user||=User.find(session[:user_id])

    第一次调用的时候@current_user变量的数值为空,执行后面的查询数据库操作,并将结果返回给@current_user储存,下次如果再调用这个方法的时候就不会执行查询数据库的操作,直接返回结果。通过代码大大提升了效率。

 
posted @ 2015-10-12 00:44  Jacky_Kun  阅读(130)  评论(0编辑  收藏  举报