2009-10-01 3 views
1

Использование actions_as_tree Я хотел бы иметь возможность предварительно загружать целое дерево, имеющее полную дочернюю иерархию, с одним вызовом SQL. С этой целью я добавил tree_id в таблицу и пробежал все потомки в этом дереве.Делает ли action_as_tree для поддержки активной загрузки?

Я изучил act_as_nested_set (на самом деле awesome_nested_set) как возможность, но так как я прививаю деревья в другие деревья, я обнаружил, что использование вложенного набора для моих целей выполняется слишком много обновлений. Наряду с act_as_versioned это неприемлемое осложнение для дизайна, который мне нужен. Для моих целей я считаю, что act_as_tree лучше подходит.

Моя единственная проблема - захватить целое дерево с неповрежденной иерархией. Опция: include ActiveRecord работает с: детьми, но не потомками. Я доволен написанием собственного метода для извлечения и сопоставления ассоциаций вручную. Какие-либо рекомендации или примеры того, как это сделать?

С моей точки зрения, единственное преимуществом вложенных множеств, я откладывая использовать дерево (один, который поддерживает захват всего структурированное дерева) является селективным захватом любых подраздела дерева. Я в порядке с этим.

Решение, которое я надеюсь избежать, состоит в том, чтобы устранить ассоциацию: children, которая поставляется вместе с деревом, и определить и вручную загрузить дочерний массив, определенный на каждом узле дерева.

+0

Я больше не буду искать ответы на этот Q. – Mario

ответ

1

Я изучил это в прошлом и IIRC, я обнаружил, что вы можете загрузить дерево известной глубины одним запросом SQL, соединяя таблицу с самим собой n раз; однако невозможно загрузить полное дерево произвольного размера. Следовательно, потребность в дизайне вложенных множеств.

Если ваш набор данных относительно невелик, вы можете получить все записи и повторно собрать дерево (деревья) в памяти. Может быть, этого хватит?

0

Вы можете index_tree Gem, он обеспечивает нетерпеливые методы загрузки для деревьев

RootModel.find(1).preload_tree 

Подробное описание в этом blog

Смежные вопросы