Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions lib/mongoid/paranoia.rb
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,10 @@ def to_param
def restore_relations
relations.each_pair do |name, association|
next unless association.dependent == :destroy
relation = send(name)
next unless relation.present? && relation.paranoid?
Array.wrap(relation).each do |doc|
doc.restore(recursive: true)
klass = association.klass
documents = klass ? klass.unscoped { Array.wrap(send(name)) } : Array.wrap(send(name))
documents.each do |doc|
doc.restore(recursive: true) if doc.respond_to?(:restore)
end
end
end
Expand Down
14 changes: 14 additions & 0 deletions spec/mongoid/paranoia_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -856,6 +856,20 @@ class ParanoidConfiguredReset
it { expect{ subject.restore_relations}.to_not change { NormHasMany.count } }
it { expect{ subject.restore_relations}.to_not change { NormHabtm.count } }
end

context "when the parent is reloaded before restoring (regression for #30)" do
before { subject.destroy }

it "restores soft-deleted has_many dependents" do
reloaded = ParaBase.unscoped.find(subject.id)
expect { reloaded.restore(recursive: true) }.to change { ParaHasMany.count }.by(2)
end

it "restores soft-deleted has_one dependents" do
reloaded = ParaBase.unscoped.find(subject.id)
expect { reloaded.restore(recursive: true) }.to change { ParaHasOne.count }.by(1)
end
end
end

describe ".scoped" do
Expand Down
Loading