Ich möchte eine Auswahlliste von MyModel-Unterklassen in einer Ansicht anzeigen. Es funktioniert noch nicht, also habe ich das aus meiner Sicht zur Überprüfung der Gesundheit hinzugefügt:
%Vor% Die erste Zeit rendere ich diese Seite nach dem Neustart des Servers, es zeigt die Liste der Nachkommen (es gibt sechs). Alle nachfolgenden -Zeiten werden als leere Liste []
angezeigt.
FWIW, ich habe eine require
-Anweisung in meinen Initializern:
... und ich habe festgestellt, dass sie benötigt werden.
Was ist das @ ($% & amp; läuft?
Wenn Sie require verwenden, benötigt der Kernel nicht Ihre Unterklassen my_model.rb
, auch wenn Ihr .rb
neu geladen wird, da diese bereits geladen wurden. Du müsstest durch Autoload-Schienen gehen.
Bei Ihrer ersten Anfrage werden die Autoloads " MyModel
" von " my_model.rb
" automatisch aufgerufen, was dann my_models/sub_model.rb
erfordert. Die Klasse SubModel
erbt MyModel
, die das Array descendants
auffüllt.
Bei den folgenden Anfragen wird autodes MyModel
jedoch erneut geladen (hey, du bist im Dev-Modus), was wiederum my_models/sub_model.rb
erfordert. Aber diesmal weiß der Kernel, dass er diese Datei bereits geladen hat und lädt sie nicht erneut.
Ich bin vor einer Stunde auf dieses Problem gestoßen, das mich zu Ihrem Posten geführt hat und eine Lösung gefunden hat. Was wir brauchen, sind Schienen, um Unterklassen bei jedem Aufruf der Hauptklasse automatisch zu laden.
Hier ist eine Lösung:
%Vor% Diese Zeilen könnten wahrscheinlich außerhalb der Klasse platziert werden. Das sollte genug sein (es ist für mich), wenn Sie nur Dateien in my_models
und nicht in Unterverzeichnissen haben. Wenn Sie etwas haben (zum Beispiel MyModels::Car::Ford
, müssen Sie möglicherweise die gleiche Art von Zeug in die Submodule einfügen (in my_models/car.rb
).
Tags und Links ruby-on-rails-3 activerecord