为什么即使我不将它设置为 nil,变量还是 nil?
Why is the variable nil even if I don't set it to nil?
我不明白为什么从session
中删除user_id
后current_user
为零。当调用 current_user
函数时,它不会再次 return 旧的 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
我假设这些方法是在控制器中定义的。控制器实例变量只有单个 HTTP 请求的生命周期。会话值持续时间更长,但您删除了此处重要的会话值。
当下一个请求进来时,@current_user
需要重新设置,因为session[:user_id]
是nil,你实际上是在调用User.find_by(id: nil)
,这将return无。
我不明白为什么从session
中删除user_id
后current_user
为零。当调用 current_user
函数时,它不会再次 return 旧的 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
我假设这些方法是在控制器中定义的。控制器实例变量只有单个 HTTP 请求的生命周期。会话值持续时间更长,但您删除了此处重要的会话值。
当下一个请求进来时,@current_user
需要重新设置,因为session[:user_id]
是nil,你实际上是在调用User.find_by(id: nil)
,这将return无。