@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)
, иначе он просто вернет существующий объект без повторной инициализации.