从current_user
删除user_id
后,我不明白为什么session
为零。调用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 :(得分:0)
我假设这些方法是在控制器中定义的。控制器实例变量仅具有单个HTTP请求的生命周期。会话值持续时间更长,但您已删除了此处重要的会话值。
当下一个请求进入时,需要再次设置@current_user
,并且由于session[:user_id]
为零,因此您实际上是调用User.find_by(id: nil)
,它将返回nil。