Функция назначения в RoR (Rails) - PullRequest
1 голос
/ 14 марта 2012

Я следил за этим учебником, онлайн

http://ruby.railstutorial.org/chapters/sign-in-sign-out?version=3.2#top

и в части 8.2.3 есть что-то странное, чего я не понимаю. Это говорит об этом методе:

module SessionsHelper

  def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    current_user = user
  end
end

и упоминает, что

current_user = пользователь

- это присвоение, которое должно быть определено. Это странная причина в большинстве языков, которые я использовал до сих пор, когда я хочу присвоить значение, я просто использую знак "=".

поэтому он продолжает определять эту функцию:

 def current_user=(user)
    @current_user = user
  end

почему он просто не использовал раньше?

module SessionsHelper

  def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    @current_user = user
  end
end

Является ли вышеуказанный подход неправильным?

1 Ответ

1 голос
/ 14 марта 2012

@current_user является переменной экземпляра. Хорошей практикой считается не показывать ваши голые переменные экземпляра всему миру. Вместо этого вы определяете геттер и сеттер для него. В setter, например, вы можете делать проверки достоверности. Или вызвать обратные вызовы. Или нажмите / выдвиньте некоторое состояние.

Это просто более удобно, безопасно и гибко. За счет нескольких строк кода.

Кроме того, в ruby ​​это применяется на уровне языка. Вы не можете просто получить доступ к переменным экземпляра.

class Foo
  def initialize
    @bar = 1
  end
end

puts Foo.new.@bar # raises exception
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...