2013-10-13 40 views
2

這是我第一次在同一模型(產品類別)中建立層次結構。Rails:acts_as_tree和acts_as_sane_tree

我在這個主題上發現了一個很棒的post。由於我使用Rails 4 & Postgres,根據文章支持遞歸查詢(這是我第一次聽到這個術語),「帶遞歸查詢的鄰接列表」似乎是要走的路,因爲它很容易建模和快速查詢。

該文章提出了acts_as_sane_tree gem,它支持遞歸查詢。這個回購沒有更新兩年,我不確定它是否支持Rails 4.該項目是acts_as_tree gem的分支,它支持Rails 4並且維護良好。

我應該使用哪種寶石?並且acts_as_tree gem是否支持遞歸查詢以避免昂貴的查詢?

回答

2

如果你不確定使用什麼寶石,我總是建議看看the Ruby Toolbox。它有助於評估一個創業項目是否仍然活躍,有多少開發者使用這個創業板以及更多。你爲什麼知道這麼做?不要選擇不再維護的寶石。你想使用社區使用的工具,並保持與主流接近。如果你不遵循社區,你會遇到問題,如果你需要修正錯誤,進一步的文檔或想更新你的Rails版本。

在這種情況下for nested ActiveRecord awesome_nested_set和血統是很好的候選人。我不會選擇遞歸查詢實現,因爲大多數數據庫不支持這一點。除非有很好的理由,否則將應用程序綁定到特定的數據庫管理系統是不值得的。

1

你有沒有考慮祖先的寶石? 「它揭示了所有的標準樹結構關係(祖先,父母,根,子女,兄弟姐妹,後代),並且所有這些都可以在單個SQL查詢中獲取。」

+0

感謝您的回覆。根據我的理解,與遞歸查詢相鄰列表相對於路徑枚舉(Ancestry gem)具有一些優勢:1.參照完整性,2.更容易查詢子項,3.不限制層次結構的深度,4.僅更新一個查詢/插入/刪除。來源:http://gmarik.info/blog/2012/10/14/recursive-data-structures-with-rails/ http://www.slideshare.net/billkarwin/models-for-hierarchical-data/http: //stackoverflow.com/questions/4907698/design-relational-database-use-hierarchical-datamodels-or-avoid-them – migu