Ich habe folgendes Setup:
app / models / mein_modul / service.rb
%Vor%app / models / mein_modul / service / rack.rb:
%Vor%app / models / mein_Modul / service / rails.rb:
%Vor%app / models / mein_modul / service / sinatra.rb:
%Vor%Das geht soweit, aber jetzt meine Frage:
Warum muss ich diese drei Zeilen hinzufügen:
%Vor%zu meiner Datei service.rb?
Wenn ich die drei Zeilen nicht hinzufüge:
%Vor%Wenn ich die drei Zeilen hinzufüge:
%Vor%Jemand eine Idee?
Übrigens: Ich benutze Ruby 2.0.0-preview1, Rails 4.0.0.rc1 und erstelle ein neues Rails-Modul mit
%Vor% Standardmäßig wird Rails in der Entwicklungsumgebung Konstanten in den üblichen Unterverzeichnissen von app
automatisch laden, indem es an der üblichen Stelle sucht (z. B. /app/models/my_module/service/rack.rb
für MyModule::Service::Rack
). Dieses automatische Laden findet statt, wenn die Konstante zum ersten Mal referenziert wird und nicht bei der App-Initialisierung.
Dies bedeutet jedoch, dass vor dem Verweis auf die Konstante die Datei, die sie definiert, nicht geladen wird, es sei denn, sie ist explizit erforderlich.
Wenn Sie also MyModule::Service.raw_types
aufrufen, wird MyModule::Service
von app/models/my_module/service.rb
geladen, wenn es nicht bereits definiert ist. Wenn jedoch noch keine Referenz auf seine Unterklassen erstellt wurde, werden diese Konstanten nicht definiert, es sei denn die Dateien, die sie definieren, werden explizit benötigt. Wenn Sie diese Dateien in der Datei, die ist ist, automatisch für diesen Methodenaufruf verfügbar machen, werden sie verfügbar gemacht.
Moral: Wenn Sie sicherstellen möchten, dass die Unterklassen von MyModule::Service
immer definiert sind, wenn MyModule::Service
ist, müssen Sie sie in /app/models/my_module/service.rb
Tags und Links ruby ruby-on-rails ruby-on-rails-4