diff --git a/app/controllers/admin/schedules_controller.rb b/app/controllers/admin/schedules_controller.rb index d560c246..876ae071 100644 --- a/app/controllers/admin/schedules_controller.rb +++ b/app/controllers/admin/schedules_controller.rb @@ -25,10 +25,10 @@ module Admin # if there is not selected schedule we create it unless @program.selected_schedule.present? schedule = @program.schedules.create - @program.selected_schedule = schedule.id + @program.selected_schedule = schedule @program.save! end - @schedule_id = @program.selected_schedule + @schedule_id = @program.selected_schedule.id end def update diff --git a/app/controllers/conference_controller.rb b/app/controllers/conference_controller.rb index fcde92ad..066c0bab 100644 --- a/app/controllers/conference_controller.rb +++ b/app/controllers/conference_controller.rb @@ -13,13 +13,13 @@ class ConferenceController < ApplicationController def schedule @rooms = @conference.venue.rooms if @conference.venue - unless @program.selected_schedule.present? && @program.events.scheduled(@program.selected_schedule).any? + unless @program.selected_schedule.present? && @program.events.scheduled(@program.selected_schedule.id).any? redirect_to events_conference_path(@conference.short_title) end @events = @conference.program.events - @events_xml = @program.schedules.find(@program.selected_schedule).event_schedules.order(start_time: :asc) - .map(&:event).group_by{ |event| event.scheduled_start_time.to_date } if program.selected_schedule.present? + @events_xml = @program.selected_schedule.event_schedules.order(start_time: :asc).map(&:event) + .group_by{ |event| event.scheduled_start_time.to_date } if @program.selected_schedule.present? @dates = @conference.start_date..@conference.end_date @step_minutes = EventType::LENGTH_STEP.minutes @conf_start = 9 @@ -38,7 +38,7 @@ class ConferenceController < ApplicationController @dates = @conference.start_date..@conference.end_date if @program.selected_schedule.present? - @events_schedules = @program.schedules.find(@program.selected_schedule).event_schedules.order(start_time: :asc) + @events_schedules = @program.selected_schedule.event_schedules.order(start_time: :asc) else @events_schedules = [] end diff --git a/app/models/event.rb b/app/models/event.rb index f80f85ef..ea72a6c1 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -270,7 +270,7 @@ class Event < ActiveRecord::Base # returns the event_schedule for this event and for the selected_schedule def selected_event_schedule - event_schedules.find_by(schedule_id: program.try(:selected_schedule)) + event_schedules.find_by(schedule_id: program.try(:selected_schedule_id)) end private diff --git a/app/models/program.rb b/app/models/program.rb index 9a25376a..bb03e4ac 100644 --- a/app/models/program.rb +++ b/app/models/program.rb @@ -8,6 +8,7 @@ class Program < ActiveRecord::Base has_many :tracks, dependent: :destroy has_many :difficulty_levels, dependent: :destroy has_many :schedules, dependent: :destroy + belongs_to :selected_schedule, class_name: 'Schedule' has_many :events, dependent: :destroy do def require_registration where(require_registration: true, state: :confirmed) diff --git a/app/views/conference/_carousel.html.haml b/app/views/conference/_carousel.html.haml index 1f4b9a61..0234e35e 100644 --- a/app/views/conference/_carousel.html.haml +++ b/app/views/conference/_carousel.html.haml @@ -27,7 +27,7 @@ %td.room{ style: "height: #{ td_height(@rooms) }px;" } .room.elipsis.break-words{ style: "-webkit-line-clamp: #{ room_lines(@rooms) }; height: #{ room_height(@rooms) }px;" } = room.name - - event_schedules = room.event_schedules.select{ |e| (e.schedule_id == @conference.program.selected_schedule) && (e.start_time >= start_time) && (e.start_time < (start_time + number_columns.hour)) } + - event_schedules = room.event_schedules.select{ |e| (e.schedule_id == @conference.program.selected_schedule.id) && (e.start_time >= start_time) && (e.start_time < (start_time + number_columns.hour)) } - (1..intervals).each do |i| - if span > 1 - span -= 1 diff --git a/db/migrate/20160704091928_create_schedules.rb b/db/migrate/20160704091928_create_schedules.rb index 9afea760..19370ab4 100644 --- a/db/migrate/20160704091928_create_schedules.rb +++ b/db/migrate/20160704091928_create_schedules.rb @@ -4,6 +4,6 @@ class CreateSchedules < ActiveRecord::Migration t.belongs_to :program, index: true t.timestamps null: false end - add_column :programs, :selected_schedule, :integer # Selected schedule ID + add_reference :programs, :selected_schedule, index: true end end diff --git a/db/schema.rb b/db/schema.rb index 7761dd93..8494999a 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: 20160705110711) do +ActiveRecord::Schema.define(version: 20160704092023) do create_table "ahoy_events", force: :cascade do |t| t.uuid "visit_id", limit: 16 @@ -180,9 +180,9 @@ ActiveRecord::Schema.define(version: 20160705110711) do t.integer "event_id" t.integer "schedule_id" t.integer "room_id" + t.datetime "start_time" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.datetime "start_time" end add_index "event_schedules", ["event_id"], name: "index_event_schedules_on_event_id" @@ -265,18 +265,20 @@ ActiveRecord::Schema.define(version: 20160705110711) do create_table "programs", force: :cascade do |t| t.integer "conference_id" - t.integer "rating", default: 0 - t.boolean "schedule_public", default: false - t.boolean "schedule_fluid", default: false + t.integer "rating", default: 0 + t.boolean "schedule_public", default: false + t.boolean "schedule_fluid", default: false t.datetime "created_at" t.datetime "updated_at" t.string "languages" - t.integer "selected_schedule" - t.boolean "blind_voting", default: false + t.boolean "blind_voting", default: false t.datetime "voting_start_date" t.datetime "voting_end_date" + t.integer "selected_schedule_id" end + add_index "programs", ["selected_schedule_id"], name: "index_programs_on_selected_schedule_id" + create_table "qanswers", force: :cascade do |t| t.integer "question_id" t.integer "answer_id" diff --git a/lib/tasks/several_schedules.rake b/lib/tasks/several_schedules.rake index d1c9d81c..f83b9664 100644 --- a/lib/tasks/several_schedules.rake +++ b/lib/tasks/several_schedules.rake @@ -4,7 +4,7 @@ namespace :data do task move_events_attributes: :environment do Program.all.each do |program| schedule = Schedule.create(program: program) - program.selected_schedule = schedule.id + program.selected_schedule = schedule program.save program.events.each do |event| unless event.start_time.nil? && event.room_id.nil? diff --git a/spec/controllers/conference_controller_spec.rb b/spec/controllers/conference_controller_spec.rb index 1c2cc281..80e1276a 100644 --- a/spec/controllers/conference_controller_spec.rb +++ b/spec/controllers/conference_controller_spec.rb @@ -39,8 +39,8 @@ describe ConferenceController do it 'assigns variables' do expect(assigns(:conference)).to eq conference - expect(assigns(:events_xml)).to eq conference.program.schedules.find(conference.program.selected_schedule).event_schedules - .order(start_time: :asc).map(&:event).group_by{ |event| event.scheduled_start_time.to_date } + expect(assigns(:events_xml)).to eq conference.program.selected_schedule.event_schedules.order(start_time: :asc) + .map(&:event).group_by{ |event| event.scheduled_start_time.to_date } end it 'renders successfully' do diff --git a/spec/factories/event_schedule.rb b/spec/factories/event_schedule.rb index 60e702ce..2f06ebd2 100644 --- a/spec/factories/event_schedule.rb +++ b/spec/factories/event_schedule.rb @@ -13,10 +13,10 @@ FactoryGirl.define do unless program.selected_schedule.present? schedule = create(:schedule, program: program) program.schedules << schedule - program.selected_schedule = schedule.id + program.selected_schedule = schedule program.save! end - event_schedule.schedule_id = program.selected_schedule + event_schedule.schedule = program.selected_schedule end end end