在rails app目录中将文件夹作为模块常量加载的方法
所以有一个rails 5项目,并希望加载这样的目录
/app /services /user foo.rb
作为常量:: Services :: User :: Foo
有没有人有过使用rails自动加载路径以这种方式加载常量的经验?
foo.rb
module Services module User class Foo end end end
解
将其添加到您的application.rb文件中
config.autoload_paths << Rails.root.join('app')
请参阅此处有关自动加载的讨论
https://github.com/rails/rails/issues/14382#issuecomment-37763348 https://github.com/trailblazer/trailblazer/issues/89#issuecomment-149367035
自动加载
您需要在app/services/services/user/foo.rb
定义Services::User::Foo
如果您不想要这个奇怪的子文件夹重复,您还可以将services
移动到app/models/services
或lib/services
。
您也可以将foo.rb
在app/services/user/foo.rb
,但它应该定义User::Foo
。
渴望加载
如果您不需要任何名称空间和类名称的魔术,那么它非常简单:
Dir[Rails.root.join('app/services/**/*.rb')].each{|rb| require rb}
这将急切地加载app/services
和任何子文件夹中的任何Ruby脚本。