Erfordert die Abhängigkeit zum Abrufen von Rails-Unterklassen

8

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%     
Mattherick 15.05.2013, 16:21
quelle

1 Antwort

12

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

anfordern     
gregates 15.05.2013, 17:35
quelle