祖先 - 显示树中至少有一个类别有产品的类别

时间:2016-01-29 20:08:04

标签: ruby-on-rails ancestry globalize

我使用祖先和全球化我的类别的宝石,任何类别都可以有与之相关的产品。

我想要做的是显示整个树类别(使用特定语言,如果存在),其中该树中至少有一个类别包含产品(不仅仅是产品所在的类别)。

到目前为止,我有以下代码,几乎可以满足我的需求,但它只是过滤产品所在的类别,但我需要获取整个树(从根到底)。

Category.includes(:translations, category_maps: [:products]).where(category_translations: {:locale => I18n.locale.to_s} ).group("categories.id, category_maps.id, category_translations.id, products.id").having("count(products.id) > ?",0).arrange_serializable(:order => 'category_translations.name')

知道怎么做到这一点? 谢谢Miroslav

解决方案

我终于找到了另一种方法。在我看来迭代根类别的地方,在渲染整个类别树之前,我验证树中至少有一个类别包含产品,然后渲染类别,否则不会。

<% if Category.find(root['id']).subtree.joins(:products).group("categories.id").having("count(products.id) > ?",0).length > 0 %> 

1 个答案:

答案 0 :(得分:0)

我终于找到了另一种方法。在我看来迭代根类别的地方,在我渲染整个类别树之前,我验证树中至少有一个类别包含产品,然后渲染类别,否则不会。

<% if Category.find(root['id']).subtree.joins(:products).group("categories.id").having("count(products.id) > ?",0).length > 0 %>