2009-10-01 48 views
1

使用acts_as_tree我希望能夠通過一次SQL調用來預加載整個具有完整子級別的完整樹。爲此,我在表中添加了一個tree_id,並貫穿該樹中的所有後代。是否可以使用acts_as_tree來支持急切的加載?

我已經探索acts_as_nested_set(實際上awesome_nested_set)作爲一種可能性,但由於我將樹移植到其他樹中,我發現爲我的目的使用嵌套集執行了太多更新。與acts_as_versioned一起,這對我所設計的設計來說是一個令人無法接受的複雜情況。爲了我的目的,我相信acts_as_tree更適合。

我唯一的問題是抓住一個完整的層次結構樹。 ActiveRecord的include選項適用於:children但不是:後代。我滿足於編寫我自己的手動檢索和映射關聯的方法。有關如何完成此任務的任何指導或示例?

從我的觀點來看,我暫時不想使用樹(支持抓取整個結構化樹)的嵌套集的唯一好處是選擇性抓取樹的任何的任何子部分。我沒關係。

我希望避免的解決方案是消除與樹一起出現的:children關聯,並定義並手動加載每個樹節點上定義的子數組。

+0

我已經不再尋求答案,這樣Q. – Mario 2015-03-27 19:51:34

回答

1

我看着這個在過去和IIRC我發現,您可以通過自身加入表ñ次加載使用一個SQL查詢已知深度的樹;但是,無法加載任意大小的完整樹。因此需要嵌套集合設計。

如果您的數據集相對較小,您可以獲取所有記錄並在內存中重新組裝樹。也許這就夠了?

0

您可以index_tree寶石,它提供了一個預先加載方法樹木

RootModel.find(1).preload_tree 

詳細說明在這個blog