令人敬畏的嵌套集 - 错误创建数据库结构

时间:2011-11-29 20:44:32

标签: ruby ruby-on-rails-3 model tree nested-sets

我使用这个插件来创建我的树结构。我的数据库架构有点问题 - 我不确定它是否运行良好。 我的数据库表看起来像这样:

+----+---------+-----------+------+------+---------------------+---------------------+
| 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 ,但在我的情况下不是。我还是不知道,我做错了什么。

以下是我创建项目的过程:

- 创建节点(root):

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 :(得分:0)

我发现创建后我必须运行 MyModel.rebuild!。这似乎重做了所有的lft,rgt值等。

您似乎也能够在具有后代的类的实例上运行 rebuild 。文档相当不错,我使用以下备忘单解决了大部分问题:

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