Ruby on rails 来自3个不同表的具有3个ID的多对多

Ruby on rails 来自3个不同表的具有3个ID的多对多,ruby-on-rails,sqlite,ruby-on-rails-4,many-to-many,has-many-through,Ruby On Rails,Sqlite,Ruby On Rails 4,Many To Many,Has Many Through,我有3种型号: 教师 专长 房间 1教师可以有很多专长 1.老师可以有很多房间 一个房间可以有很多老师 专业知识可以有很多老师 专业知识和空间之间不需要有联系 我的链接表是第四个模型,我在其中存储多对多有3列: 教师id 专业知识 房间号 一旦教师登录,他需要为自己的专业选择不同的房间,因此他单击列出的其中一个专业,然后在新页面中出现复选框,其中包含他可以选择的房间 问题是,当我保存教师时,我在链接表中创建了一条记录,但我丢失了教师拥有的所有专业知识。因为我只有一个专家id,关系教师专家

我有3种型号:

  • 教师
  • 专长
  • 房间
1教师可以有很多专长

1.老师可以有很多房间

一个房间可以有很多老师

专业知识可以有很多老师

专业知识和空间之间不需要有联系

我的链接表是第四个模型,我在其中存储多对多有3列:

  • 教师id
  • 专业知识
  • 房间号
一旦教师登录,他需要为自己的专业选择不同的房间,因此他单击列出的其中一个专业,然后在新页面中出现复选框,其中包含他可以选择的房间

问题是,当我保存教师时,我在链接表中创建了一条记录,但我丢失了教师拥有的所有专业知识。因为我只有一个专家id,关系教师专家删除了所有专家,只保留了分配房间的专家

有关于如何管理这些模型的提示吗?
我尝试了很多次使用has,但显然犯了一些我找不到的大错误。

A has和belient many的关系只是两个模型之间的关系。因此,在您的情况下,我的理解是,您必须为这两个表创建两个表,因为这两个表具有并属于许多关系:

  • 在教师和专家之间(教师id、专家id)

  • 在教师和房间之间(教师id,房间id)


如果房间和专业知识之间没有关系,则不应在同一张表中找到它们

谢谢Mariekou,但我想我的问题错了。事实上,空间和专业知识之间也存在关系。我需要多对多列具有三个ID。或者我应该如何简单地将专家id添加到我的rooms\u teachers链接表中,而不声明专家id之间的任何关系?我想我明白了。教师与教室之间不应存在关系,而应存在专家与教室之间的关系。教师登录后,当他选择一个专业知识时,他可以看到该专业知识的不同可用房间。然后你需要一个新的模型课程,例如,有三个ID的教师、专家和教室。所以:-教师拥有并属于许多专业知识-专业知识拥有并属于许多房间-课程属于教师、专业知识和房间有帮助吗?