0

私は祖先を使用し、カテゴリに宝石をグローバル化し、どのカテゴリにも製品を関連付けることができます。

私がやりたいことは、カテゴリのツリー全体を (存在する場合は特定の言語で) 表示することです。そのツリー内の少なくとも 1 つのカテゴリに製品が含まれています (製品があるカテゴリだけではありません)。

これまでのところ、次のコードがあります。これは、必要なことをほぼ実行しますが、製品があるカテゴリをフィルタリングするだけですが、ツリー全体 (ルートから下部まで) を取得する必要があります。

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')

これを達成する方法はありますか?ありがとう、ミロスラフ

解決

私はついに反対側からそれを行う方法を見つけました。私の見解では、ルート カテゴリを繰り返します。カテゴリ ツリー全体をレンダリングする前に、ツリー内の少なくとも 1 つのカテゴリに製品が含まれていることを確認してから、カテゴリをレンダリングします。

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

1 に答える 1