我为我的类别使用祖先和全球化宝石,任何类别都可以有与之相关的产品。
我想要做的是显示整个类别树(以特定语言,如果存在),该树中的至少一个类别包含产品(不仅仅是产品所在的类别)。
到目前为止,我有以下代码,它几乎可以满足我的需求,但它只是过滤产品所在的类别,但我需要获取整个树(从根到底部)。
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')
知道如何实现这一目标吗?谢谢你,米罗斯拉夫
解决方案
我终于找到了一种如何从另一边做到这一点的方法。在我看来,在哪里迭代根类别,在我渲染整个类别树之前,我验证树中的至少一个类别包含一个产品,然后渲染这些类别,否则不是。
<% if Category.find(root['id']).subtree.joins(:products).group("categories.id").having("count(products.id) > ?",0).length > 0 %>