即使我没有将它设置为nil,为什么变量为nil?

时间:2015-04-03 23:18:49

标签: ruby-on-rails ruby hash

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

1 个答案:

答案 0 :(得分:0)

我假设这些方法是在控制器中定义的。控制器实例变量仅具有单个HTTP请求的生命周期。会话值持续时间更长,但您已删除了此处重要的会话值。

当下一个请求进入时,需要再次设置@current_user,并且由于session[:user_id]为零,因此您实际上是调用User.find_by(id: nil),它将返回nil。