summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-17 22:12:02 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-17 22:12:02 +0200
commit1374ab51138a00024b0fe148394dbe4ea7f91578 (patch)
tree0af68464707a41fe1b585527aaf76237d0fdb456 /app
parent71a95f4ca6460a7c2bc345e8b32dbef03d6dd985 (diff)
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.
Diffstat (limited to 'app')
-rw-r--r--app/models/node.rb7
-rw-r--r--app/models/page.rb2
2 files changed, 6 insertions, 3 deletions
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
4 4
5 # Associations 5 # Associations
6 has_many :pages, -> { order("revision ASC") }, :dependent => :destroy 6 has_many :pages, -> { order("revision ASC") }, :dependent => :destroy
7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id, :dependent => :destroy, optional: true 7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id, optional: true
8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id, :dependent => :destroy, optional: true 8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id, optional: true
9 # Autosave pages carry no node_id, so has_many :pages does not cover
10 # them -- this dependent: :destroy is their only cleanup on node destroy.
9 belongs_to :autosave, :class_name => "Page", :foreign_key => :autosave_id, :dependent => :destroy, optional: true 11 belongs_to :autosave, :class_name => "Page", :foreign_key => :autosave_id, :dependent => :destroy, optional: true
12
10 has_many :permissions, :dependent => :destroy 13 has_many :permissions, :dependent => :destroy
11 has_many :events, :dependent => :destroy 14 has_many :events, :dependent => :destroy
12 belongs_to :lock_owner, :class_name => "User", :foreign_key => :locking_user_id, optional: true 15 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
25 belongs_to :node, optional: true 25 belongs_to :node, optional: true
26 belongs_to :user, optional: true 26 belongs_to :user, optional: true
27 belongs_to :editor, :class_name => "User", optional: true 27 belongs_to :editor, :class_name => "User", optional: true
28 has_many :related_assets 28 has_many :related_assets, :dependent => :destroy
29 has_many :assets, -> { order("position ASC") }, :through => :related_assets 29 has_many :assets, -> { order("position ASC") }, :through => :related_assets
30 30
31 # Named scopes 31 # Named scopes