ruby-on-rails - 如何在相同的两个表之间建立多个多对多关系

标签 ruby-on-rails activerecord many-to-many ruby-on-rails-3

我有一个俱乐部模型,我想在其中模拟 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/

相关文章:

php - 从用户到帖子和类别的多态多对多

ruby-on-rails - Rails.cache.fetch 在记忆化方面表现更好吗

ruby-on-rails - Rails - 将缩略图链接到更大的完整图像

php - 从 CodeIgniter Active Record 类调用存储过程

sql - 如何使用事件记录查询检查 Rails 5 中是否不存在记录?

database - 在 Symfony2 中将多对多关系保存到数据库

hibernate - 使用GORM和Grails无法保持多对多关系

ruby-on-rails - 使用绝对路径启动 Rails 服务器

javascript - Rails 4 - Application.js 包含 merge 冲突,不知道如何解决它们

ruby-on-rails - DatingApp编程: ActiveRecord association for finding Users where there are no Approvals or one 1 way approvals