我正在开发一个Rails 3应用程序,我的lib
文件夹中有一个类的层次结构,例如:
lib
├── assets
├── tasks
│ └── import.rake
└── importer
├── base.rb
└── source
├── facebook.rb
├── google.rb
└── twitter.rb
我已更新config/application.rb
以包含此行:
config.autoload_paths += %W(#{config.root}/lib)
然后在Importer::Base
内部,我有一个实例方法试图加载Provider
模块中的所有类,例如:
Importer::Source.constants.each do |class_name|
Importer::Source.const_get(class_name).process
end
lib/importer/base
中的三个类具有类似于以下的类层次结构:
module Importer
module Source
class Facebook
# ...
end
end
end
当我调用此方法时,Importer::Source.constants
最终返回一个空数组。如果我直接按名称引用它们,那么这些类似乎是延迟加载的,但在constants
调用中无法访问它们。我该如何解决这个问题?
答案 0 :(得分:1)
使用@ apneadiving的建议,我可以通过将此行添加到base.rb
文件的开头来解决此问题:
Dir[Rails.root.join('lib/importer/source/**/*.rb')].each(&method(:require))