Удивительный вложенный набор - неправильное создание структуры БД - PullRequest
1 голос
/ 30 ноября 2011

Я использую этот плагин для создания своей древовидной структуры. У меня есть небольшая проблема с моей схемой БД - я не уверен, что она работает хорошо. Моя таблица БД выглядит так:

+----+---------+-----------+------+------+---------------------+---------------------+
| id | user_id | parent_id | lft  | rgt  | created_at          | updated_at          |
+----+---------+-----------+------+------+---------------------+---------------------+
|  1 |       2 |      NULL |    1 |    2 | 2011-11-25 18:48:14 | 2011-11-25 18:48:14 |
|  2 |       3 |         2 |    3 |   16 | 2011-11-25 18:49:07 | 2011-11-25 18:49:07 |
|  3 |       4 |         2 |    4 |    7 | 2011-11-25 18:50:56 | 2011-11-25 18:50:56 |
|  4 |       5 |         3 |    5 |    6 | 2011-11-25 18:56:37 | 2011-11-25 18:56:37 |
|  5 |       7 |         2 |    8 |    9 | 2011-11-28 08:44:11 | 2011-11-28 08:44:11 |
|  6 |       8 |         2 |   10 |   11 | 2011-11-28 10:56:26 | 2011-11-28 10:56:26 |
|  7 |       9 |         2 |   12 |   13 | 2011-11-28 16:57:54 | 2011-11-28 16:57:54 |
|  8 |      10 |         2 |   14 |   15 | 2011-11-29 14:01:45 | 2011-11-29 14:01:45 |
+----+---------+-----------+------+------+---------------------+---------------------+

Хотя корневой элемент (с ID = 1) автоматически обновит значения lft и rgt , но в моем случае нет. Я до сих пор не знаю, что я делаю не так.

Вот моя процедура создания предметов:

-создание узла (корень):

save_tree = TreeStruct.create!(:user_id => @user.id)

- создание элемента под корневым элементом:

save_tree = TreeStruct.create!(:user_id => @user.id)
save_tree.move_to_child_of(params[:parent])

В форме, где я создаю элементы, есть вход скрытый , и этот вход имеет значение (ID) корневого элемента.

Моя проблема - что я делаю неправильно, когда у меня все еще есть значение lft = 1 и rgt = 2 в таблице? Не должно быть значений там 1 и 16 ?

Миллион раз спасибо за любую помощь, я действительно отчаялся от этой проблемы.

1 Ответ

0 голосов
/ 29 декабря 2011

Я обнаружил, что мне нужно запустить MyModel.rebuild! после его создания. Это, кажется, переделало все значения lft, rgt и т. Д.

Похоже, вы также можете запустить rebuild на экземпляре класса с потомками. Документация довольно хорошая, я решил большинство своих проблем, используя следующую шпаргалку:

https://github.com/collectiveidea/awesome_nested_set/wiki/Awesome-Nested-Set-Cheat-Sheet

...