Rails:如何从lib文件夹中获取文件以便在控制器中使用它们?

时间:2015-03-10 18:55:46

标签: ruby-on-rails ruby

我的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?

1 个答案:

答案 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作用域,使这些常量在所有地方都有效。