2010-11-08 62 views
3

这里是微不足道的继承(STI)的设置:ActiveRecord的模型子类不显示

class Parent < ActiveRecord::Base 
end 

class Daughter < Parent 
end 

class Son < Parent 
end 

快速尝试在控制台中。期待Parent.subclasses返回两个子类,但什么也没有!

ruby-1.9.2-p0 > Parent.subclasses 
=> [] 



此外,调用

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)] 

这是轨道3,但在2.3.10

回答

5

这是一个known issue

一个解决方法是在基类文件的底部登记子类。

%w(daughter son).each {|r| require_dependency r } if Rails.env.development? 
1

相同的行为表现出我想这是一个自动加载的问题。只有在你真正需要的时候才能加载。您可以通过cache_classes = true配置的示例尝试一下,看看这个结果是否总是相同。我想不是。