2015-04-03 3 views
0

Непонятно, почему current_user является ноль после удаления user_id от session. Когда вызывается функция current_user, не возвратит ли она прежнее значение current_user?Почему переменная nil, даже если я не устанавливаю ее на нуль?

#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), который будет возвращать ноль.

Смежные вопросы