第8.2章 - @current_user或current_user

时间:2017-08-23 13:16:25

标签: ruby-on-rails ruby

我正在阅读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应该在此模块的所有方法中可用,因为它是一个实例变量。

1 个答案:

答案 0 :(得分:0)

如果您没有调用current_user方法,则永远不会初始化@current_user(分配值)。因此,只要您引用@current_user,就会nil。换句话说,logged_in?!(@current_user.nil?)将为false