私は祖先を使用し、カテゴリに宝石をグローバル化し、どのカテゴリにも製品を関連付けることができます。
私がやりたいことは、カテゴリのツリー全体を (存在する場合は特定の言語で) 表示することです。そのツリー内の少なくとも 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 %>