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

时间:2013-03-15 09:35:37

标签: ruby-on-rails ruby-on-rails-3 ancestry

我有两种模式:

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

2 个答案:

答案 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(感谢包含),然后迭代子类别和帖子。