我的lib /中有一个特定的app文件夹,其中包含与rails无关的所有内容。这是结构:
lib/
|myapp/
|repositories/
|repo1.rb
|repo2.rb
|use_cases/
|use_case1.rb
|use_case2.rb
我在autoload_path中添加了lib文件夹,如下所示:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
如果我想在我的一个控制器中使用UseCase1,我必须指定完整路径:
MyApp::UseCases::UseCase1.new
存储库也是如此。
有没有办法全局要求它,因为我只能在我的控制器中使用UseCase1.new?
答案 0 :(得分:6)
要求和包括是不同的。要求是加载文件和(使MyApp::UseCases::UseCase1
可用)的过程,而include
将模块混合到当前模块中;这具有使其常量在当前上下文中可用的效果。
在初始化程序中,尝试明确要求您的文件:
require File.join(Rails.root, "lib", "myapp", "use_cases", "use_case1.rb")
require File.join(Rails.root, "lib", "myapp", "use_cases", "use_case2.rb")
然后包含包含您的类的模块:
include MyApp::UseCases
这应该使UseCases
下的所有常量可用于在当前作用域中查找,在初始化程序的情况下,它将是main
作用域,使这些常量在所有地方都有效。