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
# Returns true if the user is logged in, false otherwise
def logged_in?
!current_user.nil?
end
# Logs out the current user
def log_out
forget(current_user)
session.delete(:user_id)
@current_user = nil
end
end
最后两个 def
中的 current_user
到底指的是什么?是上面定义的 current_user
方法吗?
而以上代码中的 @current_user
又指的是什么?感觉有点混淆了,求解答。
@current_user est une variable d'instance, current_user est une méthode de ce module et les deux dernières méthodes appelant current_user font référence à l'appel de la méthode current_user ci-dessus. Les méthodes d'instance de la même classe peuvent être appelées directement à l'aide du nom de la méthode.
@current_user est une valeur de retour dans la méthode current_user. Les deux dernières méthodes appellent la méthode current_user, qui obtient en fait la variable d'instance @current_user.
@current_user est une variable de la classe globale, current_user est le nom de la méthode, () peut être omis lors de l'appel de la méthode en ruby, donc les débutants sont facilement confus, la valeur de @current_user est nulle (la valeur initialisée de @ xxx est nul) ou La valeur renvoyée par current_user.
Pour compenser,
current_user
fait en fait référence à la variable d'instancecurrent_user
renvoyée par@current_user
cette méthode. Parce que ce que nous obtenons ici est la valeur de retour après l'appelcurrent_user
.