我有一个俱乐部模型,我想在其中模拟 session 和成员(member)这两个实体。
但是,这些实体之间实际上存在两种多对多关系,至于任何 session ,成员都可以是发言人或 guest 。现在我是一个面向对象的思想者,所以通常只创建两个类,每个类内部只有两个数组,但是 rails 让我在这里思考更多以数据为中心的问题,所以我意识到我需要打破这些 M2M与我已经完成的连接表 Speakers 和 Guest 建立关系,但现在我无法描述模型中的关系。
两个连接表模型都有“belongs_to :meeting”和“belongs_to :member”,我认为这应该足够了。
但是,我不确定 session 和成员(member)模型。
每个人都有“has_many :guests”和“has_many:扬声器”,但我不确定我是否也想去:
has_many :members, :through => :guests
has_many :members, :through => :speakers
但我怀疑这就像宣布两个会发生冲突的“成员”。
我也想过:
has_many :guests, :through => :guests
has_many :speakers, :through => :speakers
那有意义吗? ActiveRecord 如何知道他们实际上是成员(member)?
我发现了大量多态 m2m 关系和 m2m 关系的示例,其中 1 个表引用了自身,但没有好的示例可以帮助我处理这种情况,即两个单独的表具有两个不同的 m2m 关系。
有人有任何提示吗?
最佳答案
您需要选择不同的关联名称,然后指定模型:
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
关于ruby-on-rails - 如何在相同的两个表之间建立多个多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2950378/