Потрясающий вложенный набор - как складывать туда предметы? - PullRequest
1 голос
/ 23 ноября 2011

У меня следующая структура таблицы, в которой я храню элементы дерева:

| id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| user_id    | int(11)  | YES  |     | NULL    |                |
| parent_id  | int(11)  | YES  |     | NULL    |                |
| lft        | int(11)  | YES  |     | NULL    |                |
| rgt        | int(11)  | YES  |     | NULL    |                |
| created_at | datetime | YES  |     | NULL    |                |
| updated_at | datetime | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+

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

В контроллере я делаю это:

def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        save_tree = TreeStruct.create!(:user_id => @user.id)
        save_tree.move_to_child_of(params[:parent])

        format.html { redirect_to(root_url, :notice => 'OK.') }
        format.xml  { render :xml => @user, :status => :created, :location => @user }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end

Но всегда, когда я пытаюсь создать элемент в этом дереве, я получаю ошибку:

Couldn't find TreeStruct with id=28

Число 28 является идентификатором родительского элемента.Текущий созданный элемент сохранен в базе данных, но столбец parent_id имеет значение NULL .

Я немного смущаюсь - что я делаю неправильно?Почему я получаю эту ошибку?А как мне создать корень дерева и затем добавить другие элементы?

...