2010-11-08 2 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 и посмотреть, не является ли этот результат одинаковым. Полагаю, нет.