ОБНОВЛЕНИЕ
Я ошибочно проверил направляющую ребер вместо текущей верной направляющей Rails 3 (в которой ничего не говорится о after_initialize).Не уверен, почему справочник по направляющим рельсам «неправильный» - я думал, что справочник по направляющим рельсам должен был стать самым последним современным справочником?
Я оставляю этот вопрос как есть на всякий случай, если кто-то придет посмотретьдля той же «проблемы».
Вызов в стиле макроса after_initialize
- это путь.
Следует ли after_initialize
использовать в качестве метода или макросавызов стиля?
Это работает, но выдает предупреждение об устаревании:
def after_initialize
logger.info "Called after_initialize"
end
ПРЕДУПРЕЖДЕНИЕ ОБ УСТРОЙСТВЕ: Base # after_initialize устарело, используйте взамен Base.after_initialize: метод.
Это работает, и здесь нет предупреждений:
after_initialize :do_this_after_initialize
def do_this_after_initialize
logger.info "Called after_initialize"
end
Но в Руководстве по проверке и обратному вызову активных записей в 10.4 after_initialize и after_find написано:
... Если вы попытаетесь зарегистрироваться after_initialize или after_find, используя методы класса в стиле макросов, они будут просто проигнорированы.Такое поведение обусловлено соображениями производительности, так как after_initialize и after_find будут вызываться для каждой записи, найденной в базе данных, что значительно замедляет запросы ...
Это означает, что использование в стиле макросанеэффективен по сравнению со способом в стиле метода?
(я думаю руководство неверно, потому что код король: D)
Другое обновление
A коммит здесь от 28 января 2011 г. предполагает, что правильным способом все еще является использование вызова в стиле макроса, а не def after_initialize
.