Рельсы STI подкласс возвращает суперкласс
У меня есть иерархия классов STI, например, так:
Producer, Partner, Freelancer < Statusowner < Contact
Когда я звоню, например, Partner.all
Я вижу рельсы, производящие это:
SELECT "contacts".* FROM "contacts" WHERE "contacts"."type" IN ('Partner', 'Producer', 'Partner', 'Freelancer') ORDER BY contacts.name
Вы видите, что сначала он включает в себя партнера, а затем все подклассы владельца статуса, включая партнера. Это происходит аналогично со всеми подклассами.
Я поставил self.descentants
в Statusowner, поэтому все загружается на ранних этапах в среде разработки:
class Statusowner < User
def self.descendants
[Producer, Sales, Partner, Freelancer]
end
end
Есть идеи, что я делаю не так?
1 ответ
Вероятно, вам просто не следует переопределять метод потомков. может быть, если вам просто понадобятся файлы после определения класса, этого будет достаточно.
если вы предпочитаете какой-то хак для автозагрузки, возможно, вы могли бы изменить свой код на:
class Statusowner < User
MY_DESCENDANTS = [Producer, Sales, Partner, Freelancer]
end
Я считаю, что это может привести к тому же результату, но таким образом вы не переопределите исходный метод. О, кстати, подклассы наследуют переопределенный метод, поэтому все эти подклассы имеют потомков метода, возвращающих [Producer, Sales, Partner, Freelancer]
,