创建3向连接表

时间:2014-03-14 20:41:34

标签: ruby-on-rails

我对rails很新。我正在尝试创建一个表,它是三个表的组合。所以我有一个主题表,一个句号表和一个教师表。我想创建一个Class表,它是主题,句点和教师的组合。我该怎么做呢。

3 个答案:

答案 0 :(得分:3)

我会称之为Classroom(类可能会与某些内容冲突)

然后在该表中插入columns_id,subject_id和period_id列。在您的课堂模型中,您可以写

belongs_to :teacher
belongs_to :subject
belongs_to :period

在教师,科目和期间模型中你会写

has_many :classrooms

答案 1 :(得分:3)

创建这样的迁移:

编辑:在表创建块中使用belongs_to时,应使用关联名称而不是列名

def self.up
  create_table :school_classes do |t|
    t.belongs_to :subject
    t.belongs_to :teacher
    t.belongs_to :period

    #any_other_columns_required
  end

  add_index :school_classes, [:subject_id, :teacher_id, :period_id], :unique => true
end

def self.down
  drop_table :school_classes
end

答案 2 :(得分:1)

如果不同的对(主题和教师)不可能具有相同的时间段,则无需创建另一个表。在这种情况下,句号表可能是链接表:

class Period
  belongs_to :teacher
  belongs_to :subject
  ...

class Teacher
  has_many :periods
  has_many :subjects, through: :periods
  ...

class Subject
  has_many :periods
  has_many :teachers, through: :periods
  ...

我再说一遍,只有同一时期不能被不同的其他模特对使用时,你才可以这样做。例如,如果您只有一个房间,并且只有一对可以同时在此房间内学习(使用期间),则您在“期间”表中存储的信息对于每项研究都是独立的。