2012-01-12 8 views
2

私が取り組んでいるRailsアプリケーションにツリーメニュー(simple example of tree menu)を実装したいと思います。私はacts_as_treeまたはAncestryを使用するかどうかはわかりません。 acts_as_treeを使用して簡単なツリーメニューを実装する方が簡単なようですが、Ancestryは一般的によく使用されています。誰にもこれに関する考えはありますか?acts_as_treeとツリーメニューの祖先宝石

+0

acts_as_treeを使った方が簡単なのはなぜですか?モデルには1つのdbフィールドしかないので、祖先を使うことをお勧めします。あなたはこれに興味があるかもしれませんhttp://railscasts.com/episodes/262-trees-with-ancestry – mark

+0

あなたは正しいです。しかし、私はあなたが言及しているレールキャストに従おうとしましたが、[rake db:migrate](http://stackoverflow.com/questions/8828204/ancestry-dbmigrate)で問題が発生しています –

+0

おそらく別の質問をする必要があります。 try bundle db:migrate – mark

答えて

8

祖先を使用します。 adjacency listを実装するacts_as_treeとは対照的に、materialized path patternを実装するので、より強力なクエリ機能を備えています。
ネストされたセットのように他のオプションもありますが、マテリアライズドパスは通常最も包括的です。

https://communities.bmc.com/communities/docs/DOC-9902

あなたがDBレベル(例えばページ番号付きのツリーグリッド、プリロードあなたが反復メニューおよび表示するためのツリー内の深さに応じてインデント/ DEDENT)で先行順にソートする必要がある場合は、あなたがする必要があります再帰的なクエリ、またはネストされたセットまたはネストされた間隔のようなソート可能なエンコーディングを使用します。 (メモリにソートすることはオプションではありません、それがあることはほとんどない場合それはある。)

https://github.com/collectiveidea/awesome_nested_set
https://github.com/clyfe/acts_as_nested_interval

それぞれは浮き沈みがあります。あなたに合ったものを選んでください。

+0

アドバイスをいただきありがとうございます。私は祖先に着いたと思います。今すぐrake db:migrateが失敗する理由を理解する必要があります。 –

+0

私はこのトピックの詳細を読む:https://www.chiliproject.org/boards/2/topics/314 – PhuongTT