From d797ec3ca0f3b273816c0accb7ffa41317b2d5a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Tue, 3 May 2022 16:07:50 +0200 Subject: [PATCH] Fix crash deleting admin with assigned budgets Add missing relation between administrator and budget_administrators, otherwise we'd get the following exception when deleting and administrator with assigned budgets: PG::ForeignKeyViolation: ERROR: update or delete on table "administrators" violates foreign key constraint "fk_rails_ee7dc33688" on table "budget_administrators" DETAIL: Key (id)=(3) is still referenced from table "budget_administrators". --- app/models/administrator.rb | 2 ++ spec/models/administrator_spec.rb | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/app/models/administrator.rb b/app/models/administrator.rb index 1c5cb027a..bf12b94cf 100644 --- a/app/models/administrator.rb +++ b/app/models/administrator.rb @@ -1,5 +1,7 @@ class Administrator < ApplicationRecord belongs_to :user, touch: true + has_many :budget_administrators, dependent: :destroy + delegate :name, :email, :name_and_email, to: :user validates :user_id, presence: true, uniqueness: true diff --git a/spec/models/administrator_spec.rb b/spec/models/administrator_spec.rb index b2fbb5392..a891134d3 100644 --- a/spec/models/administrator_spec.rb +++ b/spec/models/administrator_spec.rb @@ -38,4 +38,13 @@ describe Administrator do expect(administrator.description_or_name_and_email).to eq("Billy Wilder (test@test.com)") end end + + describe "#destroy" do + it "removes dependent budget administrator records" do + administrator = create(:administrator) + create_list(:budget, 2, administrators: [administrator]) + + expect { administrator.destroy }.to change { BudgetAdministrator.count }.by(-2) + end + end end