Skip to content

Commit 3273448

Browse files
committed
Update foreign keys on join tables
This configures the foreign keys on the join tables to be `ON DELETE CASCADE` which allows us to use `delete_all` and avoid foreign key constraint errors.
1 parent fcb9e41 commit 3273448

10 files changed

+78
-41
lines changed

app/models/class_imports_parent.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
#
1414
# Foreign Keys
1515
#
16-
# fk_rails_... (class_import_id => class_imports.id)
17-
# fk_rails_... (parent_id => parents.id)
16+
# fk_rails_... (class_import_id => class_imports.id) ON DELETE => cascade
17+
# fk_rails_... (parent_id => parents.id) ON DELETE => cascade
1818
#
1919
class ClassImportsParent < ApplicationRecord
2020
belongs_to :class_import

app/models/class_imports_parent_relationship.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
#
1414
# Foreign Keys
1515
#
16-
# fk_rails_... (class_import_id => class_imports.id)
17-
# fk_rails_... (parent_relationship_id => parent_relationships.id)
16+
# fk_rails_... (class_import_id => class_imports.id) ON DELETE => cascade
17+
# fk_rails_... (parent_relationship_id => parent_relationships.id) ON DELETE => cascade
1818
#
1919
class ClassImportsParentRelationship < ApplicationRecord
2020
belongs_to :class_import

app/models/class_imports_patient.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
#
1414
# Foreign Keys
1515
#
16-
# fk_rails_... (class_import_id => class_imports.id)
17-
# fk_rails_... (patient_id => patients.id)
16+
# fk_rails_... (class_import_id => class_imports.id) ON DELETE => cascade
17+
# fk_rails_... (patient_id => patients.id) ON DELETE => cascade
1818
#
1919
class ClassImportsPatient < ApplicationRecord
2020
belongs_to :class_import

app/models/cohort_imports_parent.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
#
1414
# Foreign Keys
1515
#
16-
# fk_rails_... (cohort_import_id => cohort_imports.id)
17-
# fk_rails_... (parent_id => parents.id)
16+
# fk_rails_... (cohort_import_id => cohort_imports.id) ON DELETE => cascade
17+
# fk_rails_... (parent_id => parents.id) ON DELETE => cascade
1818
#
1919
class CohortImportsParent < ApplicationRecord
2020
belongs_to :cohort_import

app/models/cohort_imports_parent_relationship.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
#
1414
# Foreign Keys
1515
#
16-
# fk_rails_... (cohort_import_id => cohort_imports.id)
17-
# fk_rails_... (parent_relationship_id => parent_relationships.id)
16+
# fk_rails_... (cohort_import_id => cohort_imports.id) ON DELETE => cascade
17+
# fk_rails_... (parent_relationship_id => parent_relationships.id) ON DELETE => cascade
1818
#
1919
class CohortImportsParentRelationship < ApplicationRecord
2020
belongs_to :cohort_import

app/models/cohort_imports_patient.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
#
1414
# Foreign Keys
1515
#
16-
# fk_rails_... (cohort_import_id => cohort_imports.id)
17-
# fk_rails_... (patient_id => patients.id)
16+
# fk_rails_... (cohort_import_id => cohort_imports.id) ON DELETE => cascade
17+
# fk_rails_... (patient_id => patients.id) ON DELETE => cascade
1818
#
1919
class CohortImportsPatient < ApplicationRecord
2020
belongs_to :cohort_import

app/models/consent_form_programme.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#
1818
# Foreign Keys
1919
#
20-
# fk_rails_... (consent_form_id => consent_forms.id)
21-
# fk_rails_... (programme_id => programmes.id)
20+
# fk_rails_... (consent_form_id => consent_forms.id) ON DELETE => cascade
21+
# fk_rails_... (programme_id => programmes.id) ON DELETE => cascade
2222
#
2323
class ConsentFormProgramme < ApplicationRecord
2424
include HasVaccineMethods
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# frozen_string_literal: true
2+
3+
class AddForeignKeyCascadeToJoinTables < ActiveRecord::Migration[8.0]
4+
FOREIGN_KEYS = [
5+
%w[batches_immunisation_imports batches],
6+
%w[batches_immunisation_imports immunisation_imports],
7+
%w[class_imports_parent_relationships class_imports],
8+
%w[class_imports_parent_relationships parent_relationships],
9+
%w[class_imports_parents class_imports],
10+
%w[class_imports_parents parents],
11+
%w[class_imports_patients class_imports],
12+
%w[class_imports_patients patients],
13+
%w[cohort_imports_parent_relationships cohort_imports],
14+
%w[cohort_imports_parent_relationships parent_relationships],
15+
%w[cohort_imports_parents cohort_imports],
16+
%w[cohort_imports_parents parents],
17+
%w[cohort_imports_patients cohort_imports],
18+
%w[cohort_imports_patients patients],
19+
%w[consent_form_programmes consent_forms],
20+
%w[consent_form_programmes programmes],
21+
%w[immunisation_imports_patient_locations immunisation_imports],
22+
%w[immunisation_imports_patient_locations patient_locations],
23+
%w[immunisation_imports_patients immunisation_imports],
24+
%w[immunisation_imports_patients patients],
25+
%w[immunisation_imports_sessions immunisation_imports],
26+
%w[immunisation_imports_sessions sessions],
27+
%w[immunisation_imports_vaccination_records immunisation_imports],
28+
%w[immunisation_imports_vaccination_records vaccination_records]
29+
].freeze
30+
31+
def change
32+
FOREIGN_KEYS.each do |foreign_key|
33+
remove_foreign_key foreign_key.first, foreign_key.last
34+
add_foreign_key foreign_key.first, foreign_key.last, on_delete: :cascade
35+
end
36+
end
37+
end

db/schema.rb

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema[8.0].define(version: 2025_09_16_074716) do
13+
ActiveRecord::Schema[8.0].define(version: 2025_09_18_075325) do
1414
# These are extensions that must be enabled in order to support this database
1515
enable_extension "pg_catalog.plpgsql"
1616
enable_extension "pg_trgm"
@@ -971,27 +971,27 @@
971971
add_foreign_key "attendance_records", "patients"
972972
add_foreign_key "batches", "teams"
973973
add_foreign_key "batches", "vaccines"
974-
add_foreign_key "batches_immunisation_imports", "batches"
975-
add_foreign_key "batches_immunisation_imports", "immunisation_imports"
974+
add_foreign_key "batches_immunisation_imports", "batches", on_delete: :cascade
975+
add_foreign_key "batches_immunisation_imports", "immunisation_imports", on_delete: :cascade
976976
add_foreign_key "class_imports", "locations"
977977
add_foreign_key "class_imports", "teams"
978978
add_foreign_key "class_imports", "users", column: "uploaded_by_user_id"
979-
add_foreign_key "class_imports_parent_relationships", "class_imports"
980-
add_foreign_key "class_imports_parent_relationships", "parent_relationships"
981-
add_foreign_key "class_imports_parents", "class_imports"
982-
add_foreign_key "class_imports_parents", "parents"
983-
add_foreign_key "class_imports_patients", "class_imports"
984-
add_foreign_key "class_imports_patients", "patients"
979+
add_foreign_key "class_imports_parent_relationships", "class_imports", on_delete: :cascade
980+
add_foreign_key "class_imports_parent_relationships", "parent_relationships", on_delete: :cascade
981+
add_foreign_key "class_imports_parents", "class_imports", on_delete: :cascade
982+
add_foreign_key "class_imports_parents", "parents", on_delete: :cascade
983+
add_foreign_key "class_imports_patients", "class_imports", on_delete: :cascade
984+
add_foreign_key "class_imports_patients", "patients", on_delete: :cascade
985985
add_foreign_key "cohort_imports", "teams"
986986
add_foreign_key "cohort_imports", "users", column: "uploaded_by_user_id"
987-
add_foreign_key "cohort_imports_parent_relationships", "cohort_imports"
988-
add_foreign_key "cohort_imports_parent_relationships", "parent_relationships"
989-
add_foreign_key "cohort_imports_parents", "cohort_imports"
990-
add_foreign_key "cohort_imports_parents", "parents"
991-
add_foreign_key "cohort_imports_patients", "cohort_imports"
992-
add_foreign_key "cohort_imports_patients", "patients"
993-
add_foreign_key "consent_form_programmes", "consent_forms"
994-
add_foreign_key "consent_form_programmes", "programmes"
987+
add_foreign_key "cohort_imports_parent_relationships", "cohort_imports", on_delete: :cascade
988+
add_foreign_key "cohort_imports_parent_relationships", "parent_relationships", on_delete: :cascade
989+
add_foreign_key "cohort_imports_parents", "cohort_imports", on_delete: :cascade
990+
add_foreign_key "cohort_imports_parents", "parents", on_delete: :cascade
991+
add_foreign_key "cohort_imports_patients", "cohort_imports", on_delete: :cascade
992+
add_foreign_key "cohort_imports_patients", "patients", on_delete: :cascade
993+
add_foreign_key "consent_form_programmes", "consent_forms", on_delete: :cascade
994+
add_foreign_key "consent_form_programmes", "programmes", on_delete: :cascade
995995
add_foreign_key "consent_forms", "consents"
996996
add_foreign_key "consent_forms", "locations"
997997
add_foreign_key "consent_forms", "locations", column: "school_id"
@@ -1016,14 +1016,14 @@
10161016
add_foreign_key "identity_checks", "vaccination_records", on_delete: :cascade
10171017
add_foreign_key "immunisation_imports", "teams"
10181018
add_foreign_key "immunisation_imports", "users", column: "uploaded_by_user_id"
1019-
add_foreign_key "immunisation_imports_patient_locations", "immunisation_imports"
1020-
add_foreign_key "immunisation_imports_patient_locations", "patient_locations"
1021-
add_foreign_key "immunisation_imports_patients", "immunisation_imports"
1022-
add_foreign_key "immunisation_imports_patients", "patients"
1023-
add_foreign_key "immunisation_imports_sessions", "immunisation_imports"
1024-
add_foreign_key "immunisation_imports_sessions", "sessions"
1025-
add_foreign_key "immunisation_imports_vaccination_records", "immunisation_imports"
1026-
add_foreign_key "immunisation_imports_vaccination_records", "vaccination_records"
1019+
add_foreign_key "immunisation_imports_patient_locations", "immunisation_imports", on_delete: :cascade
1020+
add_foreign_key "immunisation_imports_patient_locations", "patient_locations", on_delete: :cascade
1021+
add_foreign_key "immunisation_imports_patients", "immunisation_imports", on_delete: :cascade
1022+
add_foreign_key "immunisation_imports_patients", "patients", on_delete: :cascade
1023+
add_foreign_key "immunisation_imports_sessions", "immunisation_imports", on_delete: :cascade
1024+
add_foreign_key "immunisation_imports_sessions", "sessions", on_delete: :cascade
1025+
add_foreign_key "immunisation_imports_vaccination_records", "immunisation_imports", on_delete: :cascade
1026+
add_foreign_key "immunisation_imports_vaccination_records", "vaccination_records", on_delete: :cascade
10271027
add_foreign_key "location_programme_year_groups", "locations", on_delete: :cascade
10281028
add_foreign_key "location_programme_year_groups", "programmes", on_delete: :cascade
10291029
add_foreign_key "locations", "subteams"

spec/factories/consent_form_programmes.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#
1818
# Foreign Keys
1919
#
20-
# fk_rails_... (consent_form_id => consent_forms.id)
21-
# fk_rails_... (programme_id => programmes.id)
20+
# fk_rails_... (consent_form_id => consent_forms.id) ON DELETE => cascade
21+
# fk_rails_... (programme_id => programmes.id) ON DELETE => cascade
2222
#
2323
FactoryBot.define do
2424
factory :consent_form_programmes do

0 commit comments

Comments
 (0)