在我的一个控制器中,我想使用位于以下位置的服务类:services/cars/strategies/unload_car_strategy.rb
虽然unload_car_strategy.rb
位于文件夹内,但我不想使用命名空间:现在该类看起来像这样:
class UnloadCarStrategy
....
end
当我在控制器中调用UnloadCarStrategy.new
时,我收到错误:
NameError: uninitialized constant UnloadCarStrategy
如何指示Rails加载此类?
答案 0 :(得分:0)
默认情况下,app / 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