act_as_tree を使用して、完全な子階層を持つツリー全体を 1 回の SQL 呼び出しでプリロードできるようにしたいと考えています。そのために、tree_id をテーブルに追加し、そのツリー内のすべての子孫を通過します。
可能性としてacts_as_nested_set(実際にはawesome_nested_set)を調査しましたが、ツリーを他のツリーに移植したため、ネストされたセットを目的に使用すると更新が多すぎることがわかりました。act_as_versioned とともに、これは私が求めている設計にとって容認できない複雑さです。私の目的には、acts_as_tree の方が適していると思います。
私の唯一の問題は、階層をそのままにしてツリー全体を取得することです。ActiveRecord の :include オプションは、:children では機能しますが、:descendants では機能しません。アソシエーションを手動で取得してマッピングするための独自のメソッドを作成することに満足しています。これを達成するためのガイダンスや例はありますか?
私の見解では、ツリー (構造化されたツリー全体の取得をサポートするもの) を使用するために脇に置いているネストされたセットの唯一の利点は、ツリーの任意のサブセクションを選択的に取得できることです。私はそれで大丈夫です。
私が回避したい解決策は、ツリーに付随する :children 関連付けを排除し、各ツリーノードで定義された子配列を定義して手動でロードすることです。