我有两种模式:
Post
- category_id
Category (ancestry model)
类别树看起来像这样:
- Root Category
- Sub Category
现在我们可以说帖子被归类为子类别。我在根类别中,我想看到所有在子类别中的帖子。是否有可能与祖先一起获得这些?
类别树总是只有一个嵌套级别,所以也许祖先太多了..
提前致谢
只有一个嵌套级别的工作示例
@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 :(得分:7)
我建议以下方法可以解决问题:
Post.where(category_id: @category.subtree_ids)
如果不做一些非常可怕的事情,也可能是最有效的方式。
答案 1 :(得分:1)
像
这样的东西Post.where('subcategory_id in ('+@category.subcategories.select(&:id).join(',')+')')
然后,您可以请求在@ category.sucategories生成的列表中包含其category-id的帖子,您可以从中选择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
在一个查询中检索所有postst(感谢包含),然后迭代子类别和帖子。