Подтвердить что ты не робот

Как использовать 'after_initialize' в Rails 3?

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.

4b9b3361