2013-06-29 82 views
0

我有一個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的子類,再包括合作伙伴。這與所有的子類相似。

我已在Statusowner self.descentants,所以一切都被在開發環境中加載早:

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

任何想法,我做錯了什麼?

回答

0

可能你根本不應該重新定義後代方法。 也許如果你只是在定義類之後需要這些文件就足夠了。

如果你喜歡那種一劈自動加載的,也許你可以改變你的代碼:

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

我相信這可以讓你達到同樣的效果,但這樣一來,你不會覆蓋原有的方法。哦,順便說一下,子類繼承了overroden方法,所以這些子類都有方法後代返回[Producer, Sales, Partner, Freelancer]

+0

感謝您的提示。將盡快嘗試。 –