Рельсы 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],

Другие вопросы по тегам