Laden von Subclasten bei der Rails-Initialisierung

8

Ich habe Probleme mit Rails (3.1.3), um einige meiner ActiveRecord-Unterklassen bei der Anwendungsinitialisierung zu laden. Hier ist die Verzeichnisstruktur, die ich habe:

%Vor%

Ich versuche, Class1.subclasses zu verwenden, aber es gibt immer [] zurück. Das Hinzufügen von #{config.root}/app/models/class1s zu config.autoload_paths hilft nicht, da diese Klassen lazy geladen sind und nichts auf die Unterklassen verweist, bevor ich subclasses aufruft, so dass sie bereits geladen sind. Das Hinzufügen des Pfads zu config.eager_load_paths scheint ebenfalls nicht zu funktionieren, und sein Verhalten basiert auf der Einstellung config.cache_classes , die normalerweise in Entwicklung und Produktion unterschiedlich ist.

Ich möchte in der Lage sein, die Rails-Konsole zu starten und zu sehen:

%Vor%

Genau das ist das Verhalten, das ich sehe:

%Vor%

Im Augenblick bin ich darauf beschränkt, dies am Ende meiner Class1-Definition zu setzen, um alle Klassen zu laden, wenn ich auf die Class1-Klasse zugreife:

%Vor%

Es macht den Job fertig, aber ich fühle mich schmutzig dabei. Irgendwelche Gedanken würden sehr geschätzt werden.

    
HMCFletch 29.11.2011, 05:23
quelle

3 Antworten

2

Am einfachsten laden Sie dazu alle Klassen mit (& gt; = 3.0):

%Vor%

Es werden alle Klassen von Ihrer App, Engines, Plugins geladen. Ist das gleiche Ergebnis wie beim Laden von Lazy in Config. Aber in diesem Ansatz müssen Sie nicht nur diese Methode verwenden.

    
mtfk 07.01.2012 19:52
quelle
2

Das Problem beim eifrigen Laden ist, dass sobald eine Klasse sich ändert, die Unterklassen nicht mehr geladen werden. Ich verwende einen Constantizer in meinem development.rb, der alle meine Unterklassen (e.i.-Unterverzeichnisse) durch den Dateinamen bei jeder Anfrage konstant hält. Ich lege es in lib, da einige Tests auch die Dinge verändern müssen.

lib / constantizer.rb

%Vor%

app / environment / development.rb

%Vor%     
ymmyk 23.09.2013 17:08
quelle
0

Eager Laden ist in der Entwicklungsumgebung standardmäßig deaktiviert.

Aktivieren Sie es von config/environments/development.rb

%Vor%     
Manas Chaudhari 05.10.2016 07:14
quelle