Почему обратные вызовы для событий after_find и after_initialize должны определять их как методы? - PullRequest
5 голосов
/ 11 мая 2010

Единственный способ определить обратные вызовы для событий after_find и after_initialize - это определить их как методы. Если вы попытаетесь объявить их обработчиками, используя второй метод, они будут игнорироваться.

Кто-нибудь может объяснить, почему это так?

Почему именно для этих двух обратных вызовов?

EDIT

Из книги: - Rails должен использовать отражение, чтобы определить, существуют ли обратные вызовы для вызова. При выполнении реальных операций с базой данных затраты на это обычно незначительны по сравнению с накладными расходами базы данных. Однако один оператор выбора базы данных может вернуть сотни строк, и для каждой из них придется вызывать оба обратных вызова. Это значительно замедляет запрос. Команда Rails решила, что в этом случае производительность превосходит последовательность. Что за черт...!!!! Вот и все .. Только это как объяснение ... !!!

1 Ответ

2 голосов
/ 11 мая 2010

С API :

Исключения after_find и after_initialize

Поскольку after_find и after_initialize вызываются для каждого объекта, найденного и созданного средством поиска, таким как Base.find (: all), нам пришлось реализовать простое ограничение производительности (на 50% больше скорости в простом тестовом примере) , В отличие от всех других обратных вызовов, after_find и after_initialize будут выполняться только в том случае, если определена явная реализация (def after_find). В этом случае будут вызываться все типы обратного вызова.

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