Rails祖先:获取祖先模型的子记录



我有两个模型:

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),然后遍历子类别和帖子。

相关内容

  • 没有找到相关文章

最新更新