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