2010-05-11 10 views
5

L'unico modo per definire i callback per gli eventi after_find e after_initialize è definirli come metodi. Se provi a dichiararli come gestori usando la seconda tecnica, verranno ignorati in silenzio.Perché i callback per gli eventi after_find e after_initialize devono definirli come metodi?

Qualcuno può spiegare perché è così?

Perché in particolare per questi due callback?

EDIT

Dal libro: - Rails deve usare zione riflessio- per determinare se ci sono callback per essere richiamati. Quando si eseguono operazioni di database reali, il costo di questa operazione normalmente non è significativo rispetto al sovraccarico del database. Tuttavia, una singola istruzione select del database potrebbe restituire centinaia di righe, e entrambe le callback dovrebbero essere invocate per ciascuna. Ciò rallenta notevolmente la query. Il team Rails ha deciso che in questo caso le prestazioni superano la coerenza. Che diavolo ... !!!! Questo è tutto ... Solo questo come spiegazione ... !!!

risposta

2

Da the API:

L'after_find e after_initialize eccezioni

Perché after_find e after_initialize sono chiamati per ogni oggetto trovato e istanziato da un cercatore, come ad esempio Base.find (: all), noi' abbiamo dovuto implementare un semplice vincolo di prestazioni (50% di velocità in più su un semplice caso di test). A differenza di tutti gli altri callback, after_find e after_initialize verranno eseguiti solo se è stata definita un'implementazione esplicita (def after_find). In tal caso, verranno richiamati tutti i tipi di callback.

+0

Yaa io libro sto usando come spiegazione di rifrazione dato che c'è: - Rails deve usare la reflection per determinare se ci sono callback da invocare. Quando si eseguono operazioni di database reali, il costo di questa operazione normalmente non è significativo rispetto al sovraccarico del database. Tuttavia, una singola istruzione di selezione del database potrebbe restituire centinaia di righe, ed entrambe le callback dovrebbero essere invocate per ciascuna. Ciò rallenta notevolmente la query. Il team Rails ha deciso che in questo caso le prestazioni superano la coerenza. Che diavolo ... !!!! –

Problemi correlati