From 2caf3d32b757052ce8e548cada3f3bc8c6da9fd6 Mon Sep 17 00:00:00 2001 From: Teal Bauer <git@teal.is> Date: Mon, 27 May 2024 21:20:46 +0200 Subject: [PATCH] add relevant stages relation --- app/models/conference.rb | 3 +++ app/models/relevant_stage.rb | 6 ++++++ app/models/stage.rb | 3 +++ .../20240527191332_create_relevant_stages.rb | 12 ++++++++++++ db/schema.rb | 14 +++++++++++++- test/fixtures/relevant_stages.yml | 9 +++++++++ test/models/relevant_stage_test.rb | 7 +++++++ 7 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 app/models/relevant_stage.rb create mode 100644 db/migrate/20240527191332_create_relevant_stages.rb create mode 100644 test/fixtures/relevant_stages.yml create mode 100644 test/models/relevant_stage_test.rb diff --git a/app/models/conference.rb b/app/models/conference.rb index 6a6d08e..6da9c44 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -8,6 +8,9 @@ class Conference < ApplicationRecord validates :time_zone, presence: true, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) } + has_many :relevant_stage_links, class_name: 'RelevantStage' + has_many :relevant_stages, through: :relevant_stage_links, source: :stage + def days (starts_at.to_date..ends_at.to_date) end diff --git a/app/models/relevant_stage.rb b/app/models/relevant_stage.rb new file mode 100644 index 0000000..b5914f7 --- /dev/null +++ b/app/models/relevant_stage.rb @@ -0,0 +1,6 @@ +class RelevantStage < ApplicationRecord + belongs_to :conference + belongs_to :stage + + validates :conference_id, uniqueness: { scope: :stage_id } +end diff --git a/app/models/stage.rb b/app/models/stage.rb index 0cc3b52..6470dc2 100644 --- a/app/models/stage.rb +++ b/app/models/stage.rb @@ -3,4 +3,7 @@ class Stage < ApplicationRecord has_many :sessions validates :ref_id, uniqueness: { scope: :conference_id } + + has_many :relevant_stage_links, class_name: 'RelevantStage' + has_many :relevant_conferences, through: :relevant_stage_links, source: :conference end diff --git a/db/migrate/20240527191332_create_relevant_stages.rb b/db/migrate/20240527191332_create_relevant_stages.rb new file mode 100644 index 0000000..fba4b21 --- /dev/null +++ b/db/migrate/20240527191332_create_relevant_stages.rb @@ -0,0 +1,12 @@ +class CreateRelevantStages < ActiveRecord::Migration[7.1] + def change + create_table :relevant_stages do |t| + t.references :conference, null: false, foreign_key: true + t.references :stage, null: false, foreign_key: true + + t.timestamps + end + + add_index :relevant_stages, [:conference_id, :stage_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index ed4b008..801a3e8 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.1].define(version: 2024_05_26_165259) do +ActiveRecord::Schema[7.1].define(version: 2024_05_27_191332) do create_table "assignments", force: :cascade do |t| t.integer "user_id", null: false t.integer "session_id", null: false @@ -72,6 +72,16 @@ ActiveRecord::Schema[7.1].define(version: 2024_05_26_165259) do t.datetime "updated_at", null: false end + create_table "relevant_stages", force: :cascade do |t| + t.integer "conference_id", null: false + t.integer "stage_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["conference_id", "stage_id"], name: "index_relevant_stages_on_conference_id_and_stage_id", unique: true + t.index ["conference_id"], name: "index_relevant_stages_on_conference_id" + t.index ["stage_id"], name: "index_relevant_stages_on_stage_id" + end + create_table "revision_sets", force: :cascade do |t| t.integer "conference_id", null: false t.datetime "created_at", null: false @@ -260,6 +270,8 @@ ActiveRecord::Schema[7.1].define(version: 2024_05_26_165259) do add_foreign_key "assignments", "sessions" add_foreign_key "assignments", "users" + add_foreign_key "relevant_stages", "conferences" + add_foreign_key "relevant_stages", "stages" add_foreign_key "revision_sets", "conferences" add_foreign_key "revisions", "conferences" add_foreign_key "session_speakers", "sessions" diff --git a/test/fixtures/relevant_stages.yml b/test/fixtures/relevant_stages.yml new file mode 100644 index 0000000..684efd1 --- /dev/null +++ b/test/fixtures/relevant_stages.yml @@ -0,0 +1,9 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + conference: one + stage: one + +two: + conference: two + stage: two diff --git a/test/models/relevant_stage_test.rb b/test/models/relevant_stage_test.rb new file mode 100644 index 0000000..e9e09d8 --- /dev/null +++ b/test/models/relevant_stage_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class RelevantStageTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end -- GitLab