Ruby on rails `ClassName.constants`在Rails应用程序中返回空数组
我正在开发Rails 3应用程序,在我的Ruby on rails `ClassName.constants`在Rails应用程序中返回空数组,ruby-on-rails,ruby,lazy-loading,constants,Ruby On Rails,Ruby,Lazy Loading,Constants,我正在开发Rails 3应用程序,在我的lib文件夹中有一个类的层次结构,例如: lib ├── assets ├── tasks │ └── import.rake └── importer ├── base.rb └── source ├── facebook.rb ├── google.rb └── twitter.rb 我已经更新了config/application.rb以包含这一行: config.autoload
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
最终返回一个空数组。如果我直接按名称引用这些类,它们看起来是正确的延迟加载的,但是它们在常量
调用中是不可访问的。如何修复此问题?根据@apreading的建议,我可以通过将这一行添加到base.rb文件的开头来修复此问题:
Dir[Rails.root.join('lib/importer/source/**/*.rb')].each(&method(:require))
您应该手动要求这些文件。顺便说一句,依赖关系是在开发模式下重新加载类的一种方式,比单纯的require