ActiveRecord: Ruft after_initialize nicht auf, wenn Methodenname als Symbol übergeben wird

8

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 :

%Vor%

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%     
Harish Shetty 29.09.2010, 21:53
quelle

2 Antworten

7

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:

%Vor%     
tjwallace 08.12.2010, 23:31
quelle
0

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

    
Raphomet 29.09.2010 22:02
quelle

Tags und Links