2013-03-15 64 views
0

我有兩個型號:Rails的血統:讓孩子祖先模型的記錄

Post 
- category_id 

Category (ancestry model) 

類別樹看起來例如像這樣:

- Root Category 

    - Sub Category 

現在讓我們說一個帖子被歸類爲Sub類別。我在根類別中,我想看到所有在子類別中的帖子。是否有可能獲得這些以及祖先?

類別樹始終只有一個嵌套的水平,所以也許祖先是反正太多..

在此先感謝

工作實例只是一層嵌套

@category = Category.find(params[:id]) 
category_ids = @category.children.map(&:id) << @category.id 
category_ids = category_ids.join(",") 
@posts = Post.recent.where("category_id IN (#{category_ids})").page(params[:page]) 
+0

不需要將所有內容合併成逗號分隔的字符串。 Rails會爲你做到這一點。 – thomasfedb 2013-03-15 16:52:23

回答

5

我建議以下會做的伎倆:

Post.where(category_id: @category.subtree_ids) 

而且也很可能是沒有做一些很可怕的最有效方式。

+0

多數民衆贊成真棒!謝謝 – Oliver 2013-03-15 21:22:44

1

東西像

Post.where('subcategory_id in ('[email protected](&:id).join(',')+')') 

然後,您請求在@ category.sucategories生成的列表中包含其類別標識的帖子,您可以從中選擇該標識並將它們合併爲類似'1,5,77'的字符串。

的東西非常非常不好做的(只是爲了好玩):

@mylist = Array.new 
Post.all.each do |item| 
    @mylist << item if item.subcategory.category = @selectedrootcategory 

更新: 只是想到一些其他的解決辦法:

@allposts = Array.new 
@selectedrootcategory.includes(:subcategory => :posts).subcategories.each do |subcat| 
    @allposts << subcat.posts 

所有postst在一個查詢中檢索(感謝以包括),然後您遍歷子類別和帖子。

+0

我不會推薦在rails中加載所有類別和帖子。這將使得祖先做它自己的SQL欺騙,然後使用它來對帖子進行查找,效率會低得多。 – thomasfedb 2013-03-15 16:54:02