我有一个像这样的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
知道我做错了吗?
答案 0 :(得分:0)
可能你根本就不应该重新定义后代方法。 也许如果你在定义类之后只需要文件就足够了。
如果您喜欢某种黑客自动加载,也许您可以将代码更改为:
class Statusowner < User
MY_DESCENDANTS = [Producer, Sales, Partner, Freelancer]
end
我相信这可以让你获得相同的结果,但这样你就不会覆盖原始方法。哦,顺便说一下,子类继承了overroden方法,所以所有这些子类都有方法后代返回[Producer, Sales, Partner, Freelancer]
。