为什么即使我不将它设置为 nil,变量还是 nil?

Why is the variable nil even if I don't set it to nil?

我不明白为什么从session中删除user_idcurrent_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无。