我在使用Rails(3.1.3)加载应用程序初始化中的一些ActiveRecord子类时遇到问题。这里是目录结构,我有:在Rails初始化中加载子语句
- models
- class1.rb # Class1 < ActiveRecord::Base
- class1s
- subclass1.rb # Subclass1 < Class1
- subclass2.rb # Subclass2 < Class1
我试图利用Class1.subclasses
,但它一直返回[]
。将#{config.root}/app/models/class1s
添加到config.autoload_paths
并没有帮助,因为这些类是惰性加载的,并且在我调用subclasses
之前没有引用子类,因此它们尚未加载。将路径添加到config.eager_load_paths
似乎也不起作用,其行为基于config.cache_classes
设置,该设置在开发和生产中通常是不同的。
我希望能够启动轨道控制台看到:
> Class1.subclasses
=> [Subclass1, Subclass2]
现在这是我看到的行为:
> Class1.subclasses
=> []
> Subclass1
=> Subclass1
> Class1.subclasses
=> [Subclass1]
> Subclass2
=> Subclass2
> Class1.subclasses
=> [Subclass1, Subclass2]
现在我减少到推杆这在我的Class1定义的底部,把所有的子类的就当我访问Class1的类加载:
ruby_files_pattern = File.join(Rails.application.config.root, "app", "models", "class1s", "**", "*.rb")
Dir.glob(ruby_files_pattern).each do |file|
ActiveSupport::Dependencies.require_or_load(file)
end
它完成了工作,但我觉得这样做很脏。任何想法将不胜感激。