rails 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

您可以看到它首先包括Partner,然后是Statusowner的所有子类,再次包括Partner。所有子类都会发生类似的情况。

我已经在Statusowner中设置了self.descentants,因此所有内容都会在开发环境的早期加载:

class Statusowner < User
  def self.descendants
    [Producer, Sales, Partner, Freelancer]
  end
end

知道我做错了什么吗?

您可能根本不应该重新定义子体方法。也许在定义类之后只需要文件就足够了。

如果你更喜欢一种破解方式来自动加载,也许你可以把你的代码改为:

class Statusowner < User
  MY_DESCENDANTS = [Producer, Sales, Partner, Freelancer]
end

我相信这可以让你获得同样的结果,但这样你就不会覆盖原来的方法。哦,顺便说一下,子类继承了overroden方法,所以所有这些子类都有返回[Producer, Sales, Partner, Freelancer]的方法子类。

最新更新