>  Q&A  >  본문

ruby-on-rails - Ruby 中方法名与@的混淆

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 又指的是什么?感觉有点混淆了,求解答。

天蓬老师天蓬老师2761일 전577

모든 응답(3)나는 대답할 것이다

  • 迷茫

    迷茫2017-04-22 09:02:26

    @current_user는 인스턴스 변수이고, current_user는 이 모듈의 메소드이며, current_user를 호출하는 마지막 두 메소드는 위에서 current_user 메소드를 호출하는 것을 참조합니다. 동일한 클래스의 인스턴스 메서드는 메서드 이름을 사용하여 직접 호출할 수 있습니다.
    @current_user는 current_user 메서드의 반환 값입니다. 마지막 두 메서드는 current_user 메서드를 호출하며 실제로 인스턴스 변수 @current_user를 가져옵니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-22 09:02:26

    @current_user는 전역 클래스의 변수, current_user는 메소드 이름, ()는 루비에서 메소드 호출 시 생략 가능하므로 초보자도 헷갈리기 쉽고, @current_user의 값은 nil(@의 초기화된 값)입니다. xxx는 nil입니다) 또는 current_user가 반환한 값입니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-22 09:02:26

    보상하기 위해 current_user는 실제로 current_user 이 메서드에서 반환된 @current_user 인스턴스 변수를 참조합니다. 여기서 우리가 얻는 것은 current_user 호출 이후의 반환 값이기 때문입니다.

    회신하다
    0
  • 취소회신하다