在Rails中建模多个多关系

时间:2012-02-16 06:07:17

标签: ruby-on-rails database-design

在阅读RailsGuides后,我在此处和其他文档中的一些答案仍然对如何建立这种关系感到困惑。

考虑存在对象的模型用户和组,其中用户可以是组的普通成员或具有管理权限(创建组,邀请用户,删除用户,删除组)我希望两个对象都有两个 - 彼此之间有许多关系。

  • user.memberOfGroups =用户所属的群组列表
  • group.userMembers =作为该组成员的所有用户的列表
  • user.managedGroups =用户管理的组列表
  • 的特权
  • group.managingUsers =具有管理权限的用户列表 小组

这会起作用吗?

class User < ActiveRecord::Base

  has_many :managedGroups, :class_name => "Group", :foreign_key => "managingUsers"
  has_many :memberOfGroups, :class_name => "Group", :foreign_key => "userMembers"

end

class Group < ActiveRecord::Base

  has_many :managingUsers, :class_name => "User", :foreign_key => "managedGroups"
  has_many :userMembers, :class_name => "User", :foreign_key => "memberOfGroups"

end

我在指南中找到了如何使用scaffold生成模型对象,这对我很好,我只想为POST和GET创建一个基本的Web服务。如果以上是正确的,它应该像使用脚手架创建模型一样简单,然后编辑以包含显示的行?

1 个答案:

答案 0 :(得分:3)

一些问题:

  • 成员资格和访问控制应该由不同的表建模。
  • 团体管理是否意味着会员资格?
  • 所描述的外键设计只允许每个用户管理一个组/一个组以拥有一个管理器。在所有这些:许多关系中你需要第三个连接模型。

这将是一个很好的起点:

class User < ActiveRecord::Base
  has_many :users_groups
  has_many :groups, :through => :users_groups
end

class Group < ActiveRecord::Base
  has_many :users_groups
  has_many :users, :through => :users_groups
end

class UsersGroup < ActiveRecord::Base # will be the users_groups table
  belongs_to :user
  belongs_to :group
end

class Permission < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
  validate_presence_of :name # The name of the permission e.g. "manage"
end