2010-05-11 3 views
5

La seule façon de définir des rappels pour les événements after_find et after_initialize consiste à les définir en tant que méthodes. Si vous essayez de les déclarer en tant que gestionnaires en utilisant la seconde technique, ils seront ignorés en silence.Pourquoi les rappels pour les événements after_find et after_initialize consistent-ils à les définir en tant que méthodes?

Quelqu'un peut-il expliquer pourquoi est-ce le cas? Pourquoi spécifiquement pour ces deux rappels?

EDIT

Extrait du livre: - Rails doit utiliser tion pour déterminer si réflexion il y a callbacks à invoquer. Lorsque vous effectuez de vraies opérations sur une base de données, le coût de cette opération n'est généralement pas important par rapport à la surcharge de la base de données. Cependant, une instruction de sélection de base de données unique peut renvoyer des centaines de lignes et les deux rappels doivent être appelés pour chacun d'entre eux. Cela ralentit considérablement la requête. L'équipe Rails a décidé que la performance l'emporte sur la cohérence dans ce cas. Que diable ... !!!! C'est tout .. Juste ceci comme explication ... !!!

Répondre

2

De the API:

Le after_find et after_initialize exceptions

Parce que after_find et after_initialize sont appelés pour chaque objet trouvé et instanciés par un chercheur, comme Base.find (: tous), nous » Nous avons dû implémenter une contrainte de performance simple (50% de vitesse en plus sur un cas de test simple). Contrairement à tous les autres callbacks, after_find et after_initialize ne seront lancés que si une implémentation explicite est définie (def after_find). Dans ce cas, tous les types de rappel seront appelés.

+0

Yaa i livre en utilisant comme explication de la réfrence étant donné: - Rails doit utiliser la réflexion pour déterminer s'il y a des rappels à invoquer. Lorsque vous effectuez de vraies opérations sur une base de données, le coût de cette opération n'est généralement pas important par rapport à la surcharge de la base de données. Cependant, une instruction de sélection de base de données unique peut renvoyer des centaines de lignes et les deux rappels doivent être appelés pour chacun d'entre eux. Cela ralentit considérablement la requête. L'équipe Rails a décidé que la performance l'emporte sur la cohérence dans ce cas. Que diable ... !!!! –