Ich habe festgestellt, dass Rails after_initialize
callback nicht auslöst, wenn das Callback-Symbol als Eingabe übergeben wird.
Der folgende Code funktioniert nicht.
%Vor%Der folgende Code funktioniert.
%Vor%Kann jemand dieses Verhalten erklären?
Hinweis 1
Die ActiveRecord Dokumentation sagt folgendes über after_initialize
:
Obwohl angegeben wird, dass after_initialize eine explizite Implementierung erfordert, finde ich den zweiten Satz im obigen Absatz mehrdeutig, d. h. In that case, all of
the callback types will be called.
Was ist all of the call back types
?
Das Codebeispiel in der Dokumentation enthält ein Beispiel, das keine explizite Implementierung verwendet:
%Vor% Gemäß der Dokumentation können Sie das Makro-Style-Klassenmethoden für die Callbacks after_initialize
oder after_find
:
Das after_initialize und after_find Rückrufe sind ein bisschen anders als die Andere. Sie haben keine vorher_ * Gegenstücke, und der einzige Weg zu Registrieren Sie sie, indem Sie sie als definieren regelmäßige Methoden. Wenn Sie es versuchen Registrieren nach_initialisieren oder after_find verwendet eine Makro-Stil-Klasse Methoden werden sie einfach ignoriert. Dieses Verhalten ist aufgrund der Leistung Gründe, da nach_initialisieren und after_find wird aufgerufen jeder Datensatz in der Datenbank gefunden, deutlich verlangsamen die Abfragen.
Kurz gesagt, müssen Sie eine after_initialize
Instanzmethode definieren:
Ich bin mir ziemlich sicher, dass Methoden, die durch ein Symbol aufgerufen werden, geschützt oder privat sein müssen.
Bearbeiten: Ja, hier ist die Rails 3 Dokumentation :
Die Methodenreferenzrückrufe funktionieren, indem Sie eine geschützte oder private Methode angeben, die im Objekt verfügbar ist
Tags und Links ruby-on-rails activerecord