2016-05-25 2 views
0

В одном из моих контроллеров я хотел бы использовать Сервис-класс, который я, расположенный внутри: services/cars/strategies/unload_car_strategy.rbКласса в автозагрузке Папки

Хотя unload_car_strategy.rb находится внутри папки, я не хочу использовать пространства имен: класс прямо сейчас выглядит следующим образом:

class UnloadCarStrategy 
    .... 
end 

Когда я звоню в мой контроллер UnloadCarStrategy.new я получаю ошибку:

NameError: uninitialized constant UnloadCarStrategy 

Как я могу указать Rails для загрузки этого класса?

ответ

0

По умолчанию все, что находится под вашим приложением/dir, загружается автоматически и загружается при запуске приложения. Таким образом, вы загрузили свои сервисы, когда приложение было запущено.

Несмотря на то, что если вы добавите столько папок и файлов в нужные вам папки, Rails загрузит их для вас, пока вы не будете следовать пространству имен.

Поскольку вы не используете пространство имен, класс UnloadCarStrategy не загружается.

Вы должны явно потребовать его либо в соответствующем контроллере, где это необходимо, либо в файле application.rb.

вы либо добавить
require "#{Rails.root}/app/services/cars/strategies/unload_car_strategy" в контроллере, откуда он должен называться
или добавить строку ниже в application.rb

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

Источник: https://gist.github.com/maxim/6503591#if-you-add-a-dir-under-appsomething

Смежные вопросы