Ruby on rails ActiveRecord模型子类don';我没有出现

Ruby on rails ActiveRecord模型子类don';我没有出现,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,以下是简单继承(STI)设置: 还有,打电话 ruby-1.9.2-p0 > Daughter.subclasses => [] ,正确地不返回任何子类,使父类开始将子类识别为子类: ruby-1.9.2-p0 > Parent.subclasses => [Daughter(id: integer, type: string, created_at: datetime, updated_at: datetime)] 这同样适用于另一个子类: ruby-1

以下是简单继承(STI)设置:



还有,打电话

ruby-1.9.2-p0 > Daughter.subclasses
 => [] 
,正确地不返回任何子类,使父类开始将子类识别为子类:

ruby-1.9.2-p0 > Parent.subclasses
 => [Daughter(id: integer, type: string, created_at: datetime, updated_at: datetime)] 
这同样适用于另一个子类:

ruby-1.9.2-p0 > Son.subclasses
 => [] 
ruby-1.9.2-p0 > Parent.subclasses
 => [Daughter(id: integer, type: string, created_at: datetime, updated_at: datetime), Son(id: integer, type: string, created_at: datetime, updated_at: datetime)] 

这是rails 3,但在2.3.10上显示了相同的行为,我想这是一个自动加载问题。只有在您真正需要时才加载该类。您可以通过示例尝试使用cache_classes=true配置,并查看此结果是否完全相同。我想不是。

这是一个

一种解决方法是在基类文件的底部注册子类

%w(daughter son).each {|r| require_dependency r } if Rails.env.development?
ruby-1.9.2-p0 > Son.subclasses
 => [] 
ruby-1.9.2-p0 > Parent.subclasses
 => [Daughter(id: integer, type: string, created_at: datetime, updated_at: datetime), Son(id: integer, type: string, created_at: datetime, updated_at: datetime)] 
%w(daughter son).each {|r| require_dependency r } if Rails.env.development?