2015-08-26 34 views
1

我有相關的型號如下:如何獲得在Ruby中的對象的所有後代on Rails的

GrandParent 
    has_many :kids 
    has_many :grand_children, through: :kids 
Kid 
    belongs_to :grand_parent 
    has_many :grand_kids 
GrandKid 
    belongs_to :kid 

我只是想調用對象的.descendants,並得到所有的對象屬於它的「血統」。

我認爲使用祖先寶石會給我我想要的.descendants方法,但它只會在單個類上創建一個額外的索引,允許您在所述類中獲得子孫(很適用於評論&回覆,但對我的問題沒有用)我的代碼並不是真的有必要了解這個問題,但在這裏它是爲那些感興趣的人:https://gist.github.com/bjlinville1/8425bfe88bc7060209e8

+1

我只會建議將您的帖子縮短到理解問題所需的最少代碼量。這是一個很好的問題,但過多的細節會使Q失去意義。您可能希望將您的MVC代碼包含在gisthub中。 – onebree

+1

感謝Hunter,爲了清晰起見我編輯了這個問題,並且我爲它做了一個要點,並且包含了簡化的MVC。 –

+0

Ben,如果你使用祖先,你只需要創建一個單獨的模型「Person」,並且樹中的關係將決定該實例是祖父母,孩子,孫輩等。 – TwiceB

回答

0

我相信你不正確地解釋血統寶石。 它看起來像你期望區域顯示爲國家的孩子。是對的嗎?

祖先是像結構樹有用的(認爲文件夾 - >子文件 - >子子文件 - >等)

貴國模型中的應用has_ancestry將使你的國家內建立國家。但我不相信這就是你要找的。

無論如何,您可以通過在控制器中創建/更新它時設置國家/地區的「parent_id」屬性來設置這些關係。只需將其設置爲父國家的ID即可。 如果您想要區域的樹結構,則區域相同。

+0

謝謝,那正是我以爲祖先會爲我做。我不確定我是否可以使用parent_ids來完成我的「祖先後代」表,但是現在只需手動編碼每個視圖就可以了。如果你或者其他人知道寫一張好的DRY方法,那麼我可以在幾個'後代'的展示頁面上使用它,我將不勝感激。 –

+0

你有一個「地區」控制器與「顯示」行動實施? – TwiceB

+0

我已經更新了原始問題以包含區域控制器&區域show.html.haml –

相關問題