2016-05-25 7 views
0

In einem meiner Controller würde Ich mag einen Dienst-Klasse verwenden, die ich im Inneren von: services/cars/strategies/unload_car_strategy.rbKlasse in Ordner autoloading

Obwohl die unload_car_strategy.rb in den Ordnern befindet, weiß ich nicht Namespacing verwenden möchten: die Klasse rechts sieht nun wie folgt aus:

class UnloadCarStrategy 
    .... 
end 

Wenn ich in meinem Controller UnloadCarStrategy.new nennen erhalte ich die Fehlermeldung:

NameError: uninitialized constant UnloadCarStrategy 

Wie kann ich Rails anweisen, diese Klasse zu laden?

Antwort

0

Standardmäßig wird alles unter Ihrer App/Verzeichnis automatisch und eifrig geladen, wenn Ihre Anwendung startet. So haben Sie Ihre Dienste geladen, als die Anwendung gestartet wurde.

Auch wenn Sie so viele Ordner und Dateien in den gewünschten Ordnern hinzufügen, lädt Rails sie für Sie, bis Sie dem Namespacing folgen.

Da Sie den Namespacing nicht verwenden, wird die Klasse UnloadCarStrategy nicht geladen.

Sie müssen es explizit entweder in dem entsprechenden Controller anfordern, wo es benötigt wird, oder in der Datei application.rb.

Sie entweder hinzufügen
require "#{Rails.root}/app/services/cars/strategies/unload_car_strategy" in der Steuerung von wo hat es
oder fügen Sie die folgende Zeile aufgerufen wird

config.autoload_paths += %W({config.root}/app/services/cars/strategies/unload_car_strategy.rb) 

Quelle application.rb: https://gist.github.com/maxim/6503591#if-you-add-a-dir-under-appsomething

Verwandte Themen