By default, when you destroy a parent node all of the children nodes are destroyed as well.
Is there a way I can modify this so that when you destroy a parent node all the children nodes are simply "moved up" within the tree?
Thanks!
By default, when you destroy a parent node all of the children nodes are destroyed as well.
Is there a way I can modify this so that when you destroy a parent node all the children nodes are simply "moved up" within the tree?
Thanks!
come to think of it, I should probably just create my own function called destroy_and_move_up or something =P
I tried that already.
def before_destroy self.children.each {|child| child.parent_id = nil child.save } end
(Yeah, I know, it doesn't "move them up", it just sets them to new root nodes)
However, rails won't let me do that. It says I can't modify a frozen hash. I'm not sure what that means, but I assume it means I can't modify things that are about to be destroyed.
> put it in the before_destroy callback of the model
I tried using the before_destroy for a similar purpose - I wanted to stop deletion if the node has children. But I ran into trouble, the children were destroyed anyway. From what I have read elsewhere in this group, I believe the before_destroy is only called after dependent_destroy is actioned. That may be what is happening here.
Seems to me to write a seperate method may be the way to go.
Tonypm