2011-11-11 51 views
1

これはコミュニティの最初の投稿であり、問​​題があります:カテゴリのツリーを表します。多対多自己参照ruby-on-rails

最初の解決策:各カテゴリには親カテゴリへの参照があります。 このソリューションの問題点は、カテゴリのサブツリーが必要なときに、データベースを何度もクエリしなければならないということです。ツリーのレベル(高さ)ごとに1つのクエリがあります。

選択したソリューション:私はこのような一つだけのクエリが必要ですサブツリーを構築するためのカテゴリー(ID、名前、説明)とCategoryxCategory(ancestor_id, descendant_id) それで、私がやった

select * from category a, categoryxcategory b.where b.ancestor_id = 1 and 
b.descendant_id = a.id , gets all sub-categories of the category with id = 1. 

このhibernateを使ったjavaの解決策ですが、私はRailsでやり遂げることができませんでした。どうすれば移行とActiveRecordでこれを指定できますか?

多くのおかげ

答えて

1

はあなただけancestor_id持つことはできませんと、カテゴリ内の列もdescendant_id?入れ子集合、読み取りにかなりパフォーマンスですが、/リオーダーを挿入/大きな木を更新しない場合:

はここにあり、別のパターンがありますhttps://github.com/collectiveidea/awesome_nested_set

+0

実際に私は、データベース内の単一のクエリでサブツリーを構築したいので、このソリューションを実行すると、高さ> 2のサブツリーを取得するためにデータベースを何度もクエリする必要があります。この宝石を試してみます –

+0

本当に私を助けてくれるトピックを完成させるためには、[Ancestry](http://rubygems.org/gems/ancestry)でした。お手伝いありがとう –

0

のための木をして人気のある宝石です。 nested_set gem hereをご覧ください。自己を参照している多くのものが本質的にグラフになります。つまり、慎重でないと、破損したツリー(つまり、いくつかの親を持つノード)で終わる可能性があります。

関連する問題