From 1374ab51138a00024b0fe148394dbe4ea7f91578 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Fri, 17 Jul 2026 22:12:02 +0200 Subject: Fix the cleanup cascade for a real node destroy related_assets rows outlived their pages; head and draft carried a dependent destroy that double-destroyed rows has_many :pages already owns. Autosave keeps its own -- autosave pages carry no node_id, so pages does not reach them. --- app/models/node.rb | 7 +++++-- app/models/page.rb | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/models/node.rb b/app/models/node.rb index 6ce6591..dc69508 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -4,9 +4,12 @@ class Node < ApplicationRecord # Associations has_many :pages, -> { order("revision ASC") }, :dependent => :destroy - belongs_to :head, :class_name => "Page", :foreign_key => :head_id, :dependent => :destroy, optional: true - belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id, :dependent => :destroy, optional: true + belongs_to :head, :class_name => "Page", :foreign_key => :head_id, optional: true + belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id, optional: true + # Autosave pages carry no node_id, so has_many :pages does not cover + # them -- this dependent: :destroy is their only cleanup on node destroy. belongs_to :autosave, :class_name => "Page", :foreign_key => :autosave_id, :dependent => :destroy, optional: true + has_many :permissions, :dependent => :destroy has_many :events, :dependent => :destroy belongs_to :lock_owner, :class_name => "User", :foreign_key => :locking_user_id, optional: true diff --git a/app/models/page.rb b/app/models/page.rb index be21ff7..c4d66fc 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -25,7 +25,7 @@ class Page < ApplicationRecord belongs_to :node, optional: true belongs_to :user, optional: true belongs_to :editor, :class_name => "User", optional: true - has_many :related_assets + has_many :related_assets, :dependent => :destroy has_many :assets, -> { order("position ASC") }, :through => :related_assets # Named scopes -- cgit v1.3