2016-01-29 4 views
0

Я использую родословные и глобализую драгоценные камни для своих категорий, и любая категория может иметь связанные с ней продукты.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 %> 
+0

личная рекомендация; вы будете намного лучше использовать 'act_as_tree' –

ответ

0

Я, наконец, нашел способ, как это сделать с другой стороны. На мой взгляд, где итерации корневые категории, прежде чем я отрисую все дерево категорий, я убеждаюсь, что по крайней мере одна категория в дереве содержит продукт, а затем отображает категории, иначе нет.

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

 Смежные вопросы

  • Нет связанных вопросов^_^