2010-06-01 64 views
4

我有一个俱乐部的模型,我想模拟两个实体会议和会员。如何在同一张两张桌子之间做多个多对多的关系

虽然这些实体之间实际存在两个多对多的关系,但对于任何会员而言,成员可以是发言者或来宾。现在我是一名OO思想家,所以通常只需创建两个类,每个类都只有两个内部数组,但是Rails让我在这里考虑更多的以数据为中心,因此我意识到我需要打破这些M2M我已经完成了演讲嘉宾和嘉宾的关系,但现在我无法描述模型中的关系。

两个连接表模型都有“belongs_to:meeting”和“belongs_to:member”,我认为这应该足够了。

虽然我不确定会议和会员模型。

每个人都有“的has_many:客人”和“的has_many:喇叭”但我不知道如果我还想去的地方: 的has_many:成员:通过=>:客人 的has_many:成员:通过=> :扬声器

但我怀疑这就像声明两个“成员”会冲突。

我也想过: 的has_many:嘉宾:通过=>:客人 的has_many:音箱:通过=>:音箱

这是否有意义? ActiveRecord如何知道他们实际上是成员?

我发现的多态M2M关系和M2M的关系,其中1个表引用本身,而是没有很好的例子帮我这个模式情况下两个独立的表有两个不同的M2M关系的例子堆。

任何人有任何提示?

回答

2

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

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 
+0

感谢您的答复。我尝试过,尽管:class_name不支持:through,使用:source works。 现在我只需要努力与形式,控制器,路由器等。我不知道如果我想使用成员控制器或访客和扬声器控制器。我现在的表单寻找一个会员控制器,所以我会先尝试... – Kurt 2010-06-01 19:20:47

+1

哦,对,对不起。我会为未来的读者编辑答案。对于它的价值,我可能会设计这个像'的has_many:成员:通过=>:registrations'和'的has_many:音箱:通过=>:speaker_registrations,:源=>“Member'' – mckeed 2010-06-02 15:19:07