Я нахожусь в разделе 8.4.3 - Forgetting Users руководства Rails.Rails Tutorial: использование переменных экземпляра
# app/helpers/session_helper.rb
module SessionsHelper
...
# Returns the user corresponding to the remember token cookie.
def current_user
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.signed[:user_id])
user = User.find_by(id: user_id)
if user && user.authenticated?(cookies[:remember_token])
log_in user
@current_user = user
end
end
end
# Logs out the current user
def log_out
forget(current_user)
session.delete(:user_id)
@current_user = nil
end
...
end
В методе current_user
мы назначить пользователю переменной в @current_user
экземпляра. Я не понимаю, почему мы не используем ту же переменную экземпляра в методе log_out
(в этом методе current_user
не добавляется с символом @). Откуда возникает current_user
, так как он не передан в качестве аргумента этому методу?
current_user - это вспомогательный метод https://github.com/plataformatec/devise#controller-filters-and-helpers –
'forget (current_user)' он вызывает хелпер 'current_user'. Рубиновые методы по умолчанию возвращают последнюю выполненную строку. Таким образом, помощник 'current_user' возвращает объект @ @ current_user', если пользователь logged_id. –
Важно также отметить, что '@ current_user' не задан, пока вы не вызовете метод' current_user'. Поэтому в рамках метода 'log_out' вы должны предположить, что' @ current_user' не существует, пока вы не запустите метод, который его создает, то есть 'current_user'. – Clark