Многие ко многим самостоятельно ссылаются на ruby-on-rails - PullRequest
1 голос
/ 11 ноября 2011

это мой первый пост в сообществе, и у меня есть проблема: представлять дерево категорий.

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

Выбранное решение:Category (id, name, description) и 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.

Я сделал это решение в Java, используяhibernate, но я не мог сделать в Rails, как мне указать это в миграции и ActiveRecord?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Разве вы не можете просто иметь столбцы ancestor_id и lessndant_id в категории?

вот популярный камень, который делает деревья для вас https://github.com/collectiveidea/awesome_nested_set

0 голосов
/ 11 ноября 2011

есть еще один шаблон: Nested Set, который достаточно эффективен при чтении, но не при обновлении больших деревьев / вставке / переупорядочении. взгляните на самоцвет nested_set здесь . Самостоятельная ссылка на many2many была бы по существу графом, что означает, что если вы не будете осторожны, вы можете получить поврежденные деревья (то есть узлы с несколькими родителями).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...