UPDATE
Я неправильно проверил руководство edgerails вместо текущего правильного руководства Rails 3 (в котором не упоминается after_initialize). Не уверен, почему справочник по исправлениям является "неправильным", хотя, я думал, что руководство по исправлениям должно быть последним обновленным руководством?
Я оставляю этот вопрос так: на всякий случай кто-то ищет ту же "проблему".
Вызов макроса в after_initialize
- это способ перехода.
Должен ли after_initialize
использоваться как вызов метода или макро-стиля?
Это работает, но дает предупреждение об отказе:
def after_initialize
logger.info "Called after_initialize"
end
ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ: база # 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 будет оба вызываются для каждой найденной записи в базе данных значительно замедляется вниз по запросам...
Таким образом, это означает, что использование макро-стиля неэффективно по сравнению с методом в стиле метода?
(Я предполагаю, что руководство неверно, "код cos - король: D)
Другое обновление
A commit here от 28 января 2011 года предполагает, что правильный способ по-прежнему использовать вызов макро-стиля, а не def after_initialize
.