ActiveRecord模型子类不显示

时间:2010-11-08 15:38:52

标签: ruby-on-rails activerecord

这是简单的继承(STI)设置:

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
 => [] 

,正确返回没有子节点,使Parent开始将Daughter识别为子类:

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

上显示相同的行为

2 个答案:

答案 0 :(得分:5)

这是known issue

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

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

答案 1 :(得分:1)

我认为这是一个自动加载问题。只有在您真正需要时才会加载该类。您可以尝试使用cache_classes = true配置,并查看此结果是否始终相同。我想不是。