Вот общая идиома Ruby:
def current_user
@current_user ||= User.find_by(id: something)
end
Вы можете звонить current_user
так часто, как вам хочется, сейчас, потому что она потратит время на попадание в базу данных при первом вызове.,При последующих вызовах @current_user
имеет значение, поэтому ||=
оценивается тривиально как @current_user = @current_user
.
Эффект длится до тех пор, пока существует экземпляр @
.Если это контроллер, он будет действовать для текущего действия, а затем исчезнет.Это означает, что новое действие с другим пользователем не сработает по сравнению с предыдущим значением @current_user
.
Поскольку def current_user
занимает пространство имен, отличное от @current_user
, идиома Ruby должна называть "шаблон памяти""переменная так же, как метод, который она оптимизирует.
Ваш пример делает шаблон памятки немного запутанным, потому что есть два способа генерирования текущего пользователя.