Как использовать after_initialize в Rails 3? - PullRequest
18 голосов
/ 05 февраля 2011

ОБНОВЛЕНИЕ

Я ошибочно проверил направляющую ребер вместо текущей верной направляющей 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.

1 Ответ

10 голосов
/ 05 февраля 2011

Обратные вызовы должны использоваться как стиль макроса в вашей модели: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...