Помощь по методам ruby ​​с тем же именем - PullRequest
0 голосов
/ 21 марта 2011

В настоящее время я работаю через http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:current_user] 1 и у меня возникают проблемы с пониманием разницы между двумя методами current_user. В моем другом методе sign_inесть вызов self.current_user, но у меня возникают проблемы с пониманием того, что вызывается current_user и что на самом деле делает другой метод current_user.

module SessionsHelper
  def sign_in(user)
    cookies.permanent.signed[:remember_token] = [user.id, user.salt]
    self.current_user = user
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    @current_user ||= user_from_remember_token
  end

  def signed_in?
    !current_user.nil?
  end

  private
    def user_from_remember_token
      # using the * makes us pass two values [id,salt]
      User.authenticate_with_salt(*remember_token)
    end

    def remember_token
      cookies.signed[:remember_token] || [nil,nil]
    end
end

Ответы [ 3 ]

1 голос
/ 21 марта 2011

Метод current_user= вызывается, когда вы присваиваете атрибут current_user вашего объекта, а метод current_user вызывается, когда вы этого не делаете.

Так что self.current_user = user вызывает current_user=, в то время как!current_user.nil? звонки current_user.

0 голосов
/ 21 марта 2011

Это метод присвоения.

, который будет использоваться как

obj.current_user= some_user_object, вызывает следующий метод.

  def current_user=(user)
    @current_user = user
  end

Следующий метод возвращает объект текущему пользователю.Если @current_user равен нулю, он назначит ему объект пользователя и вернет его.

some_user=obj.current_user вызывает следующий метод.

  def current_user
    @current_user ||= user_from_remember_token
  end
0 голосов
/ 21 марта 2011

Разница в том, что current_user= реализует оператор равенства. Поэтому, когда вы делаете current_user = something, это действительно вызывает current_user=(something).

В отличие от current_user, который является просто «добытчиком».

Я бы прочитал эту статью о Ruby Accessors.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...