0
例如,一个用户已加入许多组,一个组有许多用户成员。这是一个正常的多对多关系。但是,我想将用户识别为“成员”和“所有者”:一个组将拥有许多“所有者”和许多“成员”;每个用户可以是所有者或组的成员。同时,“所有者”也应该是一种“成员”。我应该如何创建这样的表结构?多对多设计,2种关于同一物体的关系?
我有这样的正常的多对多关系,还有一个字段在:group_user_relations表中标识用户是成员还是所有者。
class User < ActiveRecord::Base
# many-to-many to groups
has_many :group_user_relations
has_many :groups, :through => :group_user_relations
end
class Group < ActiveRecord::Base
# many-to-many to users
has_many :group_user_relations
has_many :users, :through => :group_user_relations
alias_attribute :members, :users
end
是的,这是有道理的。非常感谢!! – Ning 2011-06-06 16:08:15
但是例如,Group#members()应该返回此组的所有成员。有没有更简单的方法来做到这一点?我想使用named_scope搜索3个表(用户,组和USERGROUPROLE),有没有更好的方法? – Ning 2011-06-06 16:15:34
@宁:从USERGROUPROLE where roleid =?select distinct userid。 [具有给定角色的所有用户]从usergrouprole中选择userid,roleid,其中groupid =? [所有用户,按角色,在给定组中]。从usergrouprole中选择不同的用户标识,其中groupid =? [给定组中的所有用户]您可能需要向表中添加其他索引以获得良好的响应时间。 – Tim 2011-06-06 16:48:24