2010-11-08 63 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配置的示例嘗試一下,看看這個結果是否總是相同。我想不是。