Группа has_and_belongs_to_many - PullRequest
1 голос
/ 30 сентября 2019

Учитывая модель с ActiveStorage: DayFrame, Day, Session. Модели и миграция см. Ниже. DayFrame и Session - это отношения «многие ко многим». промежуточная таблица соединения day_frames_sessions, которая включает внешние ключи, относящиеся к каждому из классов DayFrame и Session. Как получить группу day_frames по сеансу и отсортировать по day.date следующим образом:

{session_id_1=> [DayFrame1, DayFram2, DayFram3], session_id_2 => [DayFrame2, DayFram1, DayFram4]}
class DayFrame
  has_and_belongs_to_many :sessions
  belongs_to :day
end

class Day
  has_and_belongs_to_many :sessions
  has_many :day_frames
end

class Session
  has_and_belongs_to_many :conference_day_frames
end

The migrations are:

class CreateDay < ActiveRecord::Migration[5.2]
  def up
    create_table :days do |t|
      t.date    :date
      t.string  :day_type
      t.timestamps
    end
  end
  def down
    drop_table :days
  end
end

class CreateDayFrame < ActiveRecord::Migration[5.2]
  def up
    create_table :day_frames do |t|
      t.string    :name
      t.time      :begin_time
      t.time      :end_time
      t.string    :frame_type
      t.timestamps
      t.references :day, index: true
  end
  def down
    drop_table :day_frames
  end
end

class CreateSessions < ActiveRecord::Migration[5.2]
  def up
    create_table :sessions do |t|
      t.integer :number, limit: 1
      t.string :title
      t.string :short_title
      t.boolean :is_active
      t.timestamps
    end
  end

  def down
    drop_table :sessions
  end
end

class CreateDayFramesSessions < ActiveRecord::Migration[5.2]
  def up
    create_join_table :day_frames, :sessions do |t|
      t.index :day_frame_id
      t.index :session_id
    end
  end
  def down
    drop_table :day_frames_sessions
  end
end
...