`ClassName.constants`在Rails应用程序中返回空数组
我正在开发一个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
调用中是不可访问的。 我怎样才能解决这个问题?
使用@ apneadiving的建议,我能够通过将此行添加到我的base.rb
文件的开头来解决此问题:
Dir[Rails.root.join('lib/importer/source/**/*.rb')].each(&method(:require))