Удаление родительского узла, но не дочерних элементов с помощью awesome_nested_set? - PullRequest
1 голос
/ 12 мая 2011

Удаление родительского узла, но не дочерних.

Все дочерние узлы должны быть перемещены до уровня удаленного родителя.

Как я могу справиться с этим сценарием с помощью плагина awesome_nested_setв?

РЕДАКТИРОВАТЬ

До удаления ребенка

Id, Title, lft, rgt, parent_id

1, root, 7, 12, ноль

2, ребенок, 8, 11, 1

3, дочерний ребенок, 9, 10, 2

После удаленной 2 записи

Id, Title, lft, rgt, parent_id

1, root, 7, 12, nil

3, дочерний элемент, 9, 10, 1

Я хочупереместить дочерний элемент к непосредственному родителю удаленного объекта.Это правильный результат?Или lft и rgt должны быть изменены после удаления?

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Контроллер

  @node = Node.find(params[:id])
  @node.delete_node_keep_sub_nodes
  @node.reload
  @node.destroy

Модель

  def delete_node_keep_sub_nodes
    if self.child?
      self.move_children_to_immediate_parent
    else
      self.move_children_to_root
    end
  end

  def move_children_to_immediate_parent
    node_immediate_children = self.children
    node_immediate_parent = self.parent
    node_immediate_children.each do |child|
      child.move_to_child_of(node_immediate_parent)
      node_immediate_parent.reload
    end
  end

  def move_children_to_root
    node_immediate_children = self.children
    node_immediate_children.each do |child|
      child.move_to_root
      child.reload
    end
  end
1 голос
/ 12 мая 2011

Как-то так:

  • Найти родителя удаленного узла
  • Переместить всех детей к новому родителю

Пример

@node = Node.find(params[:id])
@children = @node.children
@parent = @node.parent
@children.each{ |child| child.move_to_child_of @parent }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...