2012-02-16 89 views
1

在阅读RailsGuides之后,我在这里和其他文档中找到了一些答案,我仍然对如何建立这种关系建模感到困惑。在Rails中建模多个多对多关系

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

  • 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 

我有一个指导如何使用脚手架产生这是细跟我的模型对象中发现的,我只是想创建一个POST一个基本的Web服务和GET。如果以上内容是正确的,它应该像使用脚手架创建模型一样简单,然后编辑以包含显示的行?

回答

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

谢谢!我今天会试试这个。 – 2012-02-16 21:56:15

+0

我还应该提到,基于角色的访问控制有很多现成的宝石,这里有几个:https://github.com/be9/acl9 https://github.com/ryanb/cancan – bdon 2012-02-16 22:05:12