Rails:多个多对多关系(超过两个)

时间:2016-02-09 13:21:48

标签: ruby-on-rails ruby-on-rails-4 many-to-many

Rails新手在这里。

虽然将模型从Django移植到Rails,但我很难找到最佳关系......

我想实施的模型:

  • 角色(有很多用户和团队)
  • 用户(有很多角色和软件)
  • 软件(拥有众多用户和一个团队)
  • 团队(有许多软件和文档)
  • 补丁(有很多团队和软件)
  • 文档(有很多团队和软件)

是否可以与has_many建立关联:通过或更好地使用has_and_belongs_to?

我认为:通过关联会很复杂,因为给定模型存在两个以上的交叉关系。

我可以看到两种做关系的方式:一种是大型连接模型,或者是模型之间所有当前多对多关系的小连接模型。

class Role
  has_many :relations
  has_many :users, through: :relations
  has_many :teams, through: :relations
end

class User
  has_many :relations
  has_many :roles, through: :relations
  has_many :software, through: :relations
end

class Team
  has_many :relations
  has_many :software, through: :relations
end

class Software
  has_many :relations
  has_many :users, through: :relations
  has_one :team
end

class Relation
  belongs_to :user
  belongs_to :role
  belongs_to :teams
  belongs_to :software
end

1 个答案:

答案 0 :(得分:1)

has_many :through为您提供了具有全功能连接模型类的额外灵活性。如果您想要建立关系的某些方面,除了两个事物彼此关联的简单事实之外,这是必需的。

据我所知,has_many :through没有任何缺点,除了你的代码库可能是一两行,还有很多优点。我会一直使用has_many: through

复杂的关联:在进行任何编码之前,用纸和铅笔(或者如果你愿意的话,使用UML绘图应用程序)将它们全部绘制出来。如果你以前有一个工作的django应用程序,它应该足够简单地映射架构:它们都是对象关系系统。