代码之家  ›  专栏  ›  技术社区  ›  Kurt

如何在同一两个表之间建立多对多关系

  •  4
  • Kurt  · 技术社区  · 14 年前

    我有一个俱乐部的模型,我想在那里模拟两个实体的会议和成员。

    然而,这些实体之间实际上存在着两种多对多的关系,对于任何会议,成员可以是演讲者,也可以是来宾。现在我是一个OO思考者,所以通常只创建两个类,每个类内部只有两个数组,但是Rails让我觉得这里更以数据为中心,所以我意识到我需要打破这些M2M关系,与我做过的连接表演讲者和来宾建立联系,但是现在我很难描述rela模型中的关系。

    这两个连接表模型都有“隶属于:会议”和“隶属于:成员”,我认为这就足够了。

    不过,我对会议和会员模式不太确定。

    每个人都有“有很多:客人”和“有很多:发言人”,但我不确定我是否还想去: 有许多:成员,:到=>:来宾 有许多:成员,:到=>:演讲者

    但我怀疑这就像宣布两个将发生冲突的“成员”。

    我还想到: 有多少客人,:到=>:客人 有许多:扬声器,:到=>:扬声器

    这有道理吗?ActiveRecord如何知道他们实际上是成员?

    我发现了大量的多态M2M关系和M2M关系的例子,其中一个表引用它自己,但没有好的例子来帮助我模拟这种情况,即两个单独的表有两个不同的M2M关系。

    有人有什么建议吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   mckeed    14 年前

    您需要选择不同的关联名称,然后指定模型:

    class Meeting
      has_many :guests
      has_many :speakers
      has_many :guest_members, :through => :guests, :source => 'Member'
      has_many :speaker_members, :through => :speakers, :source => 'Member'
    end