Aus*_*tio 9 ruby ruby-on-rails ruby-on-rails-5
所以有一个rails 5项目,并希望加载这样的目录
/app
/services
/user
foo.rb
Run Code Online (Sandbox Code Playgroud)
作为constant :: Services :: User :: Foo
有没有人有过使用rails自动加载路径以这种方式加载常量的经验?
foo.rb
module Services
module User
class Foo
end
end
end
Run Code Online (Sandbox Code Playgroud)
解
将其添加到您的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
Eri*_*nil 10
你需要在Services::User::Foo里面定义app/services/services/user/foo.rb
如果你不想要这个奇怪的子文件夹重复,你也可以移动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}
Run Code Online (Sandbox Code Playgroud)
这将急切地加载内部app/services和任何子文件夹中的任何Ruby脚本.
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |