文件夹自动加载中的类

时间:2016-05-25 10:14:45

标签: ruby-on-rails class ruby-on-rails-4 namespaces

在我的一个控制器中,我想使用位于以下位置的服务类:services/cars/strategies/unload_car_strategy.rb

虽然unload_car_strategy.rb位于文件夹内,但我不想使用命名空间:现在该类看起来像这样:

class UnloadCarStrategy
  ....
end

当我在控制器中调用UnloadCarStrategy.new时,我收到错误:

NameError: uninitialized constant UnloadCarStrategy

如何指示Rails加载此类?

1 个答案:

答案 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