From 71a95f4ca6460a7c2bc345e8b32dbef03d6dd985 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Fri, 17 Jul 2026 22:11:44 +0200 Subject: Refuse destroying nodes that still have children NestedTree's before_destroy silently delete_all'd the whole subtree, bypassing every per-node cleanup. Nodes are never destroyed recursively; descendants must be removed individually. --- app/models/concerns/nested_tree.rb | 8 -------- 1 file changed, 8 deletions(-) (limited to 'app/models/concerns') diff --git a/app/models/concerns/nested_tree.rb b/app/models/concerns/nested_tree.rb index 9a2eb0e..befcdb3 100644 --- a/app/models/concerns/nested_tree.rb +++ b/app/models/concerns/nested_tree.rb @@ -9,8 +9,6 @@ module NestedTree included do belongs_to :parent, class_name: name, foreign_key: :parent_id, optional: true, inverse_of: :children has_many :children, -> { order(:id) }, class_name: name, foreign_key: :parent_id, inverse_of: :parent - - before_destroy :delete_descendants end class_methods do @@ -77,10 +75,4 @@ module NestedTree def move_to_child_of(new_parent) update!(parent_id: new_parent.id) end - - private - - def delete_descendants - self.class.where(id: descendants.pluck(:id)).delete_all - end end -- cgit v1.3