From e99ebe546ebf0fe3ad30156d7a7a718d1bfef954 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Thu, 11 Aug 2022 09:06:28 +0100 Subject: [PATCH] Add join table for organisation self-referential parent/child relationships --- app/models/organisation.rb | 4 ++++ app/models/organisation_relationship.rb | 4 ++++ .../20220810152340_add_parent_child_relationships.rb | 9 +++++++++ db/schema.rb | 9 ++++++++- 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 app/models/organisation_relationship.rb create mode 100644 db/migrate/20220810152340_add_parent_child_relationships.rb diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 625c0bd05..57cf0a5a2 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -6,6 +6,10 @@ class Organisation < ApplicationRecord has_many :organisation_rent_periods has_many :owned_schemes, class_name: "Scheme", foreign_key: "owning_organisation_id", dependent: :delete_all has_many :managed_schemes, class_name: "Scheme", foreign_key: "managing_organisation_id" + has_many :parent_organisation_relationships, foreign_key: :child_organisation_id, class_name: "OrganisationRelationship" + has_many :parent_organisations, through: :parent_organisation_relationships + has_many :child_organisation_relationships, foreign_key: :parent_organisation_id, class_name: "OrganisationRelationship" + has_many :child_organisations, through: :child_organisation_relationships scope :search_by_name, ->(name) { where("name ILIKE ?", "%#{name}%") } scope :search_by, ->(param) { search_by_name(param) } diff --git a/app/models/organisation_relationship.rb b/app/models/organisation_relationship.rb new file mode 100644 index 000000000..034fc5d0e --- /dev/null +++ b/app/models/organisation_relationship.rb @@ -0,0 +1,4 @@ +class OrganisationRelationship < ApplicationRecord + belongs_to :child_organisation, class_name: "Organisation" + belongs_to :parent_organisation, class_name: "Organisation" +end diff --git a/db/migrate/20220810152340_add_parent_child_relationships.rb b/db/migrate/20220810152340_add_parent_child_relationships.rb new file mode 100644 index 000000000..49891f5ec --- /dev/null +++ b/db/migrate/20220810152340_add_parent_child_relationships.rb @@ -0,0 +1,9 @@ +class AddParentChildRelationships < ActiveRecord::Migration[7.0] + def change + create_table :organisation_relationships do |t| + t.integer :child_organisation_id, foreign_key: true + t.integer :parent_organisation_id, foreign_key: true + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 0baafd421..1b65e5482 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_08_02_125711) do +ActiveRecord::Schema[7.0].define(version: 2022_08_10_152340) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -263,6 +263,13 @@ ActiveRecord::Schema[7.0].define(version: 2022_08_02_125711) do t.boolean "empty_export", default: false, null: false end + create_table "organisation_relationships", force: :cascade do |t| + t.integer "child_organisation_id" + t.integer "parent_organisation_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "organisation_rent_periods", force: :cascade do |t| t.bigint "organisation_id" t.integer "rent_period"