Ruby on rails 将文件夹作为模块常量加载到rails应用程序目录中的方法

Ruby on rails 将文件夹作为模块常量加载到rails应用程序目录中的方法,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,因此,我们有一个Rails5项目,希望加载一个如下目录 /app /services /user foo.rb 作为常量::Services::User::Foo 有没有人有过让rails自动加载路径以这种方式加载常量的经验 foo.rb module Services module User class Foo end end end 解决方案 将其添加到application.rb文件中 config.autoload\u路径自动加载

因此,我们有一个Rails5项目,希望加载一个如下目录

/app
  /services
    /user
      foo.rb
作为常量::Services::User::Foo

有没有人有过让rails自动加载路径以这种方式加载常量的经验


foo.rb

module Services
  module User
    class Foo

    end
  end
end
解决方案

将其添加到application.rb文件中

config.autoload\u路径自动加载
您需要在
app/Services/Services/User/Foo.rb中定义
Services::User::Foo

如果您不想复制这个奇怪的子文件夹,您还可以将
服务
移动到
应用程序/模型/服务
库/服务

您也可以将
foo.rb
留在
app/services/user/foo.rb
中,但它应该定义
user::foo

急装 如果您不需要任何名称空间和类名的魔力,那么它非常简单:

Dir[Rails.root.join('app/services/**/*.rb')].each{|rb| require rb}

这将急切地加载
app/services
和任何子文件夹中的任何Ruby脚本。

其中有什么
foo.rb
?一个类,一个模块,松散的方法?类是如何命名的
Foo
,不是在模块内?它将是模块下的一个类(Services::User),只是更新了一个带有示例的问题感谢您花时间回答,我希望这与自动加载路径一起使用,以便在执行此配置时,在文件更改时重新加载它。自动加载路径+=Dir[file.join(Rails.root,'app/services')]对于上面的自动加载示例,常量不会显示出来,这应该是现成的,不必添加到自动加载路径b/c默认情况下,应用程序目录中的所有文件夹都在那里。我的想法是,必须有一种方法来做到这一点,而不必对
app
中的子文件夹进行同等处理。
app/models/user.rb
不定义
模型::user
,但只定义
user
例如。很好,我明白你的意思。我在想也许有办法告诉ActiveSupport将文件夹作为模块加载。这可能可以做到,稍后将在此处检查并更新