【问题标题】:Many to Many with 3 ids from 3 different tables来自 3 个不同表的 3 个 id 的多对多
【发布时间】:2014-09-12 04:55:41
【问题描述】:

我有 3 个模型:

  • 教师
  • 专长
  • 房间

一位老师可以拥有很多专业知识;

1 位老师可以有多个房间;

一个房间可以有很多老师;

1个专业可以有很多老师;

Expertise 和 Room 之间没有关系。

我的链接表,这将是第四个模型,我存储多对多的地方有 3 列:

  • teacher_id
  • expertise_id
  • room_id

一旦教师登录,他需要为他的专长选择不同的房间,因此他单击列出的他的专长之一,然后在新页面中出现复选框,其中包含他可以选择的房间。

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

关于如何管理这些模型的任何提示? 我尝试过使用has_many,但显然犯了一些我找不到的大错误。

【问题讨论】:

    标签: ruby-on-rails sqlite ruby-on-rails-4 many-to-many has-many-through


    【解决方案1】:

    A has and belongs to many 关系只在两个模型之间。所以在你的情况下,我的理解是你必须为这两个表做两个表,并且属于许多关系:

    • 在教师和专业知识之间(teacher_id 、expertience_id)

    • 教师和房间之间(teacher_id,room_id)

    如果 Room 和 Expertise 之间没有关系,则不应在同一个表中找到它们!

    【讨论】:

    • 谢谢 Mariekou,但我想我的问题弄错了。实际上,Room 和 Expertise 之间也存在关系。我需要多对多列来拥有三个 ID。或者,我应该如何简单地将 experience_id 添加到我的 rooms_teachers 链接表中,而不声明与 knowledge_id 的任何关系?
    • 我想我明白了。老师和房间之间不应该有关系,而专业知识和房间之间不应该有关系。教师登录后,当他选择专业知识时,他可以看到该专业知识的不同可用房间。然后,您需要一个新的模型课程,例如具有教师专业知识和房间的三个 ID。所以: - 教师拥有并属于许多专业知识 - 专业知识拥有并属于许多房间 - 课程属于_教师、专业知识和房间。 _ 有帮助吗?
    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2022-10-21
    相关资源
    最近更新 更多