Я использую родословные и глобализую драгоценные камни для своих категорий, и любая категория может иметь связанные с ней продукты.Ancestry - показывать категории, в которых есть как минимум одна категория в дереве
Что я хочу сделать, это показать все дерево категорий (на определенном языке, если существует), где по крайней мере одна категория в этом дереве содержит продукт (а не только категории, где находятся продукты).
До сих пор у меня есть следующий код, который делает почти то, что мне нужно, но он просто фильтрует категории, где находятся продукты, но мне нужно получить все дерево (от корня до дна).
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 %>
личная рекомендация; вы будете намного лучше использовать 'act_as_tree' –