Das ist, weil wie Autoloading Rails funktioniert.
Wenn Sie A.constants
aufrufen Rails finden A
in der Datei a.rb
und erhalten Sie die dort definierten Konstanten. Wie es scheint, hast du dort keine Konstante definiert, es ist das leere Array.
Wenn Sie anrufen A::B.class
Schienen Autoloading sucht nach A::B
und laden a/b.rb
. Wenn Sie also das nächste Mal A.constants
aufrufen, werden die Konstanten zurückgegeben, die sowohl in a.rb
als auch in a/b.rb
definiert sind, da beide Dateien jetzt geladen sind. Und deshalb gibt es das zweite Mal B
zurück.
So können Sie das Problem nicht lösen. Dies wird erwartet, da es darauf zurückzuführen ist, wie das Autoloading von Rails funktioniert.
Auch Sie sagen, dass Ihre Modelle in lib/assets/
sind, aber das macht keinen Unterschied, da es das gleiche wäre, wenn sie in models/
wären.
Ich fürchte, es gibt keine a.rb-Datei, also ist dies nicht die Antwort. Alles, was Sie brauchen, um zu replizieren, was ich in der Rails-Konsole gemacht habe, ist in der Frage (d. H. Der Ordner 'a', mit der Datei 'b.rb' wie gezeigt). –