首页 > 解决方案 > 组 has_and_belongs_to_many

问题描述

给定一个带有 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

标签: ruby-on-railsrubyrails-activestorage

解决方案


推荐阅读