2010-12-09 2 views

ответ

7

@current_user является instance variable. self.current_user вызывает метод в строке 10, который возвращает эту переменную экземпляра, сначала заполняя ее, если она в настоящее время равна нулю.

4

@current_user получает доступ к фактическому свойству объекта, тогда как self.current_user звонит в current_user метод на self.

Это означает, что вы могли бы сделать что-то вроде этого:

def current_user 
    @current_user.first_name 
end 

Так что теперь доступ к @current_user все равно даст вам собственность, но self.current_user даст вам назад первое только имя.

В вашем конкретном примере они используют кеширование объектов, чтобы установить свойство @current_user только при первом доступе. Это означает, что если @current_user равен нулю, он будет делать (login_from_session || login_from_basic_auth || login_from_cookie), иначе он просто вернет существующий объект без повторной инициализации.

1
@current_user 

dereferences переменная экземпляра, называемая @current_user.

self.current_user 

посылает сообщение :current_user к self.

Смежные вопросы