Performance: Only update specific calendars on destroy and not loop over all.

This commit is contained in:
Rolf Schmidt 2022-01-04 12:44:28 +01:00
parent f2f36d0489
commit b180a85e7f
2 changed files with 17 additions and 8 deletions

View file

@ -373,18 +373,14 @@ returns
end
# check if sla's are refer to an existing calendar
default_calendar = Calendar.find_by(default: true)
Sla.find_each do |sla|
if !sla.calendar_id
sla.calendar_id = default_calendar.id
sla.save!
next
end
if !Calendar.exists?(id: sla.calendar_id)
if destroyed?
default_calendar = Calendar.find_by(default: true)
Sla.where(calendar_id: id).find_each do |sla|
sla.calendar_id = default_calendar.id
sla.save!
end
end
true
end

View file

@ -43,6 +43,19 @@ RSpec.describe Calendar, type: :model do
expect { described_class.first.destroy }
.to change { calendar.reload.default }.to(true)
end
context 'when sla has destroyed calendar set' do
let(:sla) { create(:sla, calendar: described_class.first) }
before do
sla
end
it 'sets the new default calendar to the sla' do
expect { described_class.first.destroy }
.to change { sla.reload.calendar }.to(calendar)
end
end
end
end