Ruby on rails 将文件夹作为模块常量加载到rails应用程序目录中的方法
因此,我们有一个Rails5项目,希望加载一个如下目录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路径自动加载
/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将文件夹作为模块加载。这可能可以做到,稍后将在此处检查并更新