我正在阅读Michael Hartl关于RoR的教程,第8章。我写了这些方法:
module SessionsHelper
def login(user)
session[:user_id] = user.id
end
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
def logged_in?
!current_user.nil?
end
end
此代码工作正常。我试图摆脱current_user
方法,并将代码更改为以下内容:
module SessionsHelper
def login(user)
session[:user_id] = user.id
@current_user = User.find_by(id: session[:user_id])
end
def logged_in?
!(@current_user.nil?)
end
end
当我致电logged_in?
时,它始终会返回false
。为什么我需要调用current_user
方法才能访问@current_user
? @current_user
应该在此模块的所有方法中可用,因为它是一个实例变量。
答案 0 :(得分:0)
如果您没有调用current_user
方法,则永远不会初始化@current_user
(分配值)。因此,只要您引用@current_user
,就会nil
。换句话说,logged_in?
或!(@current_user.nil?)
将为false
。