0

我有两个模型:

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])
4

2 回答 2

8

我建议以下方法可以解决问题:

Post.where(category_id: @category.subtree_ids)

并且也可能是最有效的方式,而不会做一些非常可怕的事情。

于 2013-03-15T16:50:44.710 回答
1

就像是

Post.where('subcategory_id in ('+@category.subcategories.select(&:id).join(',')+')')

然后,您请求帖子,这些帖子在@category.sucategories 生成的列表中具有其类别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

在一个查询中检索所有帖子(感谢包含),然后您遍历子类别和帖子。

于 2013-03-15T11:37:08.200 回答