From f0a7f3c59b4b73dac7c433a33429137a0aa3a0f8 Mon Sep 17 00:00:00 2001 From: Ana Date: Mon, 15 Aug 2016 16:08:02 +0200 Subject: [PATCH] Validation in EventSchedule Validation to avoid scheduling the same event twice for the same schedule. --- app/models/event_schedule.rb | 1 + db/migrate/20160815140302_add_index_to_event_schedule.rb | 5 +++++ db/schema.rb | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20160815140302_add_index_to_event_schedule.rb diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index dd69aec9..4f5e4940 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -7,6 +7,7 @@ class EventSchedule < ActiveRecord::Base validates :event, presence: true validates :room, presence: true validates :start_time, presence: true + validates :event, uniqueness: { scope: :schedule } scope :confirmed, -> { joins(:event).where('state = ?', 'confirmed') } scope :canceled, -> { joins(:event).where('state = ?', 'canceled') } diff --git a/db/migrate/20160815140302_add_index_to_event_schedule.rb b/db/migrate/20160815140302_add_index_to_event_schedule.rb new file mode 100644 index 00000000..51ee51d4 --- /dev/null +++ b/db/migrate/20160815140302_add_index_to_event_schedule.rb @@ -0,0 +1,5 @@ +class AddIndexToEventSchedule < ActiveRecord::Migration + def change + add_index :event_schedules, [:event_id, :schedule_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 8494999a..b734a594 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160704092023) do +ActiveRecord::Schema.define(version: 20160815140302) do create_table "ahoy_events", force: :cascade do |t| t.uuid "visit_id", limit: 16 @@ -185,6 +185,7 @@ ActiveRecord::Schema.define(version: 20160704092023) do t.datetime "updated_at", null: false end + add_index "event_schedules", ["event_id", "schedule_id"], name: "index_event_schedules_on_event_id_and_schedule_id", unique: true add_index "event_schedules", ["event_id"], name: "index_event_schedules_on_event_id" add_index "event_schedules", ["room_id"], name: "index_event_schedules_on_room_id" add_index "event_schedules", ["schedule_id"], name: "index_event_schedules_on_schedule_id"