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
又指的是什么?感觉有点混淆了,求解答。
迷茫2017-04-22 09:02:26
@current_user는 인스턴스 변수이고, current_user는 이 모듈의 메소드이며, current_user를 호출하는 마지막 두 메소드는 위에서 current_user 메소드를 호출하는 것을 참조합니다. 동일한 클래스의 인스턴스 메서드는 메서드 이름을 사용하여 직접 호출할 수 있습니다.
@current_user는 current_user 메서드의 반환 값입니다. 마지막 두 메서드는 current_user 메서드를 호출하며 실제로 인스턴스 변수 @current_user를 가져옵니다.
迷茫2017-04-22 09:02:26
@current_user는 전역 클래스의 변수, current_user는 메소드 이름, ()는 루비에서 메소드 호출 시 생략 가능하므로 초보자도 헷갈리기 쉽고, @current_user의 값은 nil(@의 초기화된 값)입니다. xxx는 nil입니다) 또는 current_user가 반환한 값입니다.
黄舟2017-04-22 09:02:26
보상하기 위해 current_user
는 실제로 current_user
이 메서드에서 반환된 @current_user
인스턴스 변수를 참조합니다. 여기서 우리가 얻는 것은 current_user
호출 이후의 반환 값이기 때문입니다.