rails STI子类返回超类

时间:2013-06-29 09:34:24

标签: ruby-on-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

您会看到它首先包含合作伙伴,然后是所有状态所有者的子类,包括合作伙伴。这种情况与所有子类类似。

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

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

知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

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

如果您喜欢某种黑客自动加载,也许您可​​以将代码更改为:

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

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