awesome_nested_set используется для хранения иерархической структуры данных в базе данных отношений.Вот удивительная статья о том, как мы можем хранить древовидную структуру в базе данных
http://www.sitepoint.com/hierarchical-data-database/
http://www.sitepoint.com/hierarchical-data-database-2/
awesome_nested_set также использовать ту же технику для хранения древовидной структуры в базе данных, и в дереве должно бытьне циклическое отношение !!
Так что убедитесь!нет циклических родительских дочерних отношений между узлами.awesome_nested_set проверяет, может ли это движение создать циклическое отношение, оно выдаст исключение "Impossible move, target node cannot be inside moved tree."
Пример
Food
|\ Fruit
| |\Red
| | \Cherry
| |\Yellow
| | \Banana
|\Meat
| |\Beef
|\Pork
Теперь в этом дереве вы можете переместить все дерево Fruit
в потомке Meet
узел Но вы не можете переместить Fruit
узел в любом дочернем элементе Fruit
, потому что он создаст циклическое отношение и будет невозможно перебирать дерево.
Теперь давайте вернемся к вашему вопросу
1-я делаю это, чтобы не допустить углубления уровней. Вам не нужно беспокоиться об уровнях дерева, так как awesome_nested_set
может загрузить целое поддерево в одном запросе sql, см. Ссылку 1, как он его дозирует
2 - Любая идея, почему я получаю эту ошибку "Невозможное движение ..." Уже есть объяснение, почему вы получаете эту ошибку.Вы можете предотвратить возникновение этой ошибки, перед тем как перемещать любую проверку движения, если этот ход действителен, используя
<a href="https://github.com/collectiveidea/awesome_nested_set/blob/master/lib/awesome_nested_set/awesome_nested_set.rb#L412" rel="noreferrer">move_possible?</a>