2015-04-03 120 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。