2015-04-03 67 views
0

我不明白为什么current_user在删除user_idsession删除后为零。当调用current_user函数不会返回旧的current_user值吗?即使我不将它设置为零,为什么变量为零?

#Returns the current logged-in user (if any). 
def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
end 

# Logs out the current user. 
def log_out 
    session.delete(:user_id) 
    # @current_user = nil 
end 

回答

0

我假设这些方法是在控制器中定义的。控制器实例变量只有一个HTTP请求的使用期限。会话值持续更长时间,但您已删除了重要的会话值。

当下一个请求进来时,需要重新设置@current_user,并且因为session[:user_id]为零,所以您实质上调用了User.find_by(id: nil),这将返回nil。