diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-17 22:12:02 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-17 22:12:02 +0200 |
| commit | 1374ab51138a00024b0fe148394dbe4ea7f91578 (patch) | |
| tree | 0af68464707a41fe1b585527aaf76237d0fdb456 /app/models | |
| parent | 71a95f4ca6460a7c2bc345e8b32dbef03d6dd985 (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/models')
| -rw-r--r-- | app/models/node.rb | 7 | ||||
| -rw-r--r-- | app/models/page.rb | 2 |
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 |
