Подклассы модели ActiveRecord не отображаются - PullRequest
3 голосов
/ 08 ноября 2010

Вот тривиальное наследование (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
 => [] 

, который правильно не возвращает дочерних элементов, заставляет запускать родительский класс.Признание Дочери в качестве подкласса:

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

Ответы [ 2 ]

5 голосов
/ 08 ноября 2010

Это известная проблема

Один из способов - зарегистрировать подклассы в нижней части файла базового класса.

%w(daughter son).each {|r| require_dependency r } if Rails.env.development?
1 голос
/ 08 ноября 2010

Полагаю, это проблема автозагрузки.Класс загружается только тогда, когда вам действительно нужно.Вы можете попробовать на примере конфигурации cache_classes = true и посмотреть, всегда ли этот результат одинаков.Я полагаю, нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...