act_as_tree против драгоценного камня предков для древовидного меню

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


person Tom Kadwill    schedule 12.01.2012    source источник
comment
Почему с act_as_tree было бы проще? Я бы порекомендовал вам использовать родословную, так как в модели есть только одно поле db. Вас может заинтересовать этот railscasts.com/episodes/262-trees-with-ancestry< /а>   -  person mark    schedule 12.01.2012
comment
Вероятно, придется задать другой вопрос для этого, но попробуйте пакет exec rake db:migrate   -  person mark    schedule 12.01.2012
comment
@mark спасибо за совет, к сожалению, пакет exec rake db:migrate также не работает. Я думаю, что мне, возможно, придется создать больше, чем просто файл миграции и файл модели, я еще посмотрю на это   -  person Tom Kadwill    schedule 12.01.2012


Ответы (1)


Используйте родословную. Он обладает более мощными возможностями запросов, так как реализует шаблон материализованного пути, в отличие от act_as_tree, который реализует список смежности.
Существуют и другие варианты, такие как вложенный набор, но материализованный путь обычно является наиболее полным.

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

Если вам нужно отсортировать в предварительном порядке на уровне БД (например, древовидную сетку с разбивкой на страницы, предварительно загруженное меню, которое вы итерируете и отступаете / отступаете в соответствии с глубиной в дереве для отображения), вам нужно либо использовать рекурсивный запрос, либо сортируемое кодирование как вложенный набор или вложенный интервал. (Это если сортировка в памяти невозможна, и почти никогда не бывает.)

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

У каждого есть взлеты и падения. Выбирайте то, что вам подходит.

person clyfe    schedule 12.01.2012
comment
Спасибо за совет, я думаю, что остановился на родословной. Теперь мне просто нужно выяснить, почему rake db:migrate не работает! - person Tom Kadwill; 12.01.2012
comment
Более подробно я прочитал в этой теме: chiliproject.org/boards/2/topics/314 - person PhuongTT; 23.11.2014