Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails `ClassName.constants`在Rails应用程序中返回空数组_Ruby On Rails_Ruby_Lazy Loading_Constants - Fatal编程技术网

Ruby on rails `ClassName.constants`在Rails应用程序中返回空数组

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

我正在开发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
最终返回一个空数组。如果我直接按名称引用这些类,它们看起来是正确的延迟加载的,但是它们在
常量
调用中是不可访问的。如何修复此问题?

根据@apreading的建议,我可以通过将这一行添加到
base.rb文件的开头来修复此问题:

Dir[Rails.root.join('lib/importer/source/**/*.rb')].each(&method(:require))

您应该手动要求这些文件。顺便说一句,依赖关系是在开发模式下重新加载类的一种方式,比单纯的
require