我有两个模型:
Post
- category_id
Category (ancestry model)
分类树看起来像这样:
- Root Category
- Sub Category
现在让我们假设一个帖子被分类到子类别。我在根类别,我想看到所有的帖子是在子类别以及。有可能从祖先那里得到这些吗?
类别树总是只有一个嵌套的层次,所以可能祖先无论如何都太多了。
Thanks in advance
仅一个嵌套级别的工作示例
@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])
我建议这样做:
Post.where(category_id: @category.subtree_ids)
这也可能是最有效的方式,而不会做一些非常可怕的事情。
类似
Post.where('subcategory_id in ('+@category.subcategories.select(&:id).join(',')+')')
然后请求在@category生成的列表中具有其类别id的帖子。Sucategories,从中选择id并将它们合并为字符串,如'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
在一个查询中检索所有帖子(多亏了include),然后遍历子类别和帖子。