渴望加载多个叶子的祖先树

时间:2017-09-26 09:00:33

标签: ruby-on-rails ruby-on-rails-5 acts-as-nested-set

我正在寻找一种有效的方法来检索要显示的类别树以及产品搜索的结果。

产品可以有一个或多个类别(与叶子类别的多对多关系)。我们的想法是从找到的每个类别的唯一ID重建祖先树。我目前正在使用act-as-nested-set gem提供的ancestors帮助器,但是这样做的缺点是对每个类别执行点查询。理想情况下,它会在单个查询中检索给定类别集的所有祖先。有什么想法吗?

def search
    @search_result = @store.products.includes(:categories).where("title LIKE ?  ", "%#{params[:query]}%")

    # retrieving all leaf categories for the products above
    unique_ids = @search_result.map { |p| p.categories.map { |c| c.id }}.flatten!.uniq!
    @leaf_categories = Category.where(id: unique_ids).map { |c| c.ancestors }
end

1 个答案:

答案 0 :(得分:0)

尽量加载类别的祖先。

  

@search_result =   @ store.products.includes(:categories => [:ancestors])。where(“title LIKE   ? “,”%#{params [:query]}%“)