# Prunes a branch off of the tree, shifting all of the elements on the right
# back to the left so the counts still work.
def prune_from_tree
- return if right.nil? || left.nil? || !self.class.exists?(id)
+ return if right.nil? || left.nil? || leaf? || !self.class.exists?(id)
delete_method = acts_as_nested_set_options[:dependent] == :destroy ?
:destroy_all : :delete_all
+ # TODO: should destroy children (not descendants) when deleted_method is :destroy_all
self.class.base_class.transaction do
reload_nested_set
nested_set_scope.send(delete_method,