Ruby on rails 如何为子文件夹中的对象提供服务

Ruby on rails 如何为子文件夹中的对象提供服务,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的服务文件夹中有许多服务对象。我使用的是Rails 4: ->services a_gen.rb b_gen.rb ... a_pro.rb b_pro.rb ... 我希望我的文件夹结构类似 ->services ->gen a_gen.rb b_gen.rb ... ->pro a_pro.rb b_pro.rb ...

我的服务文件夹中有许多服务对象。我使用的是Rails 4:

 ->services
   a_gen.rb
   b_gen.rb
   ...
   a_pro.rb
   b_pro.rb
   ...
我希望我的文件夹结构类似

  ->services
    ->gen
       a_gen.rb
       b_gen.rb
       ...
    ->pro
       a_pro.rb
       b_pro.rb
       ...
我试着只制作文件夹并将对象放在那里,但Rails抱怨找不到它。我必须告诉rails去那里看看吗

更新:

我得到这个错误:

NameError-未初始化的常量ExampleModelName::APro


即使路径已加载。一旦它位于子文件夹中。。Rails找错地方了。

是的,你找错了。在
config/application.rb
中,您可以将子文件夹添加到
config.autoload\u路径
集合中。

是的,您可以这样做。在
config/application.rb
中,您可以将子文件夹添加到
config.autoload\u路径
集合中。

您可以通过两种方式完成此操作

如果希望
rails
在不修改
config.autoload\u路径的情况下自动加载它们,请按照文件夹结构定义类,如下所示:

module Gen
  class ServiceA
  end
end
如果您不想对类定义进行任何更改,则可以将这些子文件夹添加到
config.autoload\u路径中,如下所示,在
config/application.rb

module YourApplication
  class Application < Rails::Application
    config.autoload_paths += [
      "#{Rails.root}/app/services/gen",
      "#{Rails.root}/app/services/prod"
    ]
  end
end
模块应用程序
类应用程序
您可以通过两种方式实现

如果希望
rails
在不修改
config.autoload\u路径的情况下自动加载它们,请按照文件夹结构定义类,如下所示:

module Gen
  class ServiceA
  end
end
如果您不想对类定义进行任何更改,则可以将这些子文件夹添加到
config.autoload\u路径中,如下所示,在
config/application.rb

module YourApplication
  class Application < Rails::Application
    config.autoload_paths += [
      "#{Rails.root}/app/services/gen",
      "#{Rails.root}/app/services/prod"
    ]
  end
end
模块应用程序
类应用程序
用于递归解决方案

# application.rb
config.autoload_paths += Dir["#{config.root}/app/services/**/"]

求一个递归解

# application.rb
config.autoload_paths += Dir["#{config.root}/app/services/**/"]

你能举个例子吗,我试过了,但它不起作用我试过config.autoload_paths+=%W(#{config.root}/services/gen)你能举个例子吗,我试过了,但它不起作用我试过config.autoload_paths+=%W(#{config.root}/services/gen哪种方法更好?这归结为个人选择。大多数情况下,我看到第二种方法比第一种方法使用得更频繁,因为当文件夹结构发生变化时,您不需要不断更新类。这对Rails 5仍然有效吗?对于那些来自OOP PHP背景的人来说,它似乎不适用于我,前者很像是给类命名。此外,您还可以在一个模块中动态获取所有类,这非常令人惊讶。它确实有助于“模块化”您的代码,在PHP中,您必须使用某种注册表模式。哪种方法更好?它归结为个人选择。大多数情况下,我看到第二种方法比第一种方法使用得更频繁,因为当文件夹结构发生变化时,您不需要不断更新类。这对Rails 5仍然有效吗?对于那些来自OOP PHP背景的人来说,它似乎不适用于我,前者很像是给类命名。此外,您还可以在一个模块中动态获取所有类,这非常令人惊讶。它确实有助于“模块化”您的代码,在PHP中,您必须使用某种注册表模式。这是否也会尝试将非文件夹添加到路径中?它会添加
app/services
下的所有文件以及
app/services
中任何子文件夹下的任何文件;这是否也尝试将非文件夹添加到路径中?它将添加
app/services
下的所有文件以及
app/services
中任何子文件夹下的所有文件;