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.
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%Eager Laden ist in der Entwicklungsumgebung standardmäßig deaktiviert.
Aktivieren Sie es von config/environments/development.rb
Tags und Links ruby-on-rails-3 ruby-on-rails