【发布时间】:2010-04-26 14:20:17
【问题描述】:
我需要设计一个系统来跟踪具有不同角色(目前三个)组的用户成员资格。
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Role < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :role
belongs_to :group
end
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
end
理想情况下我想要的是简单地设置
@group.users << @user
并让会员拥有正确的角色。我可以使用 :conditions 来选择手动插入的数据:
:conditions => ["memberships.role_id= ? ", Grouprole.find_by_name('user')]
但是在创建组成员身份时,没有设置 role_id。
有没有办法做到这一点,因为目前我的 Group 模型中的每个用户角色都有一段有些重复的代码。
更新
应该注意 id 理想的实现是类似于
@group.admins << @user
@group.moderators << @user
这将创建该组的成员资格并适当地设置成员资格角色 (role_id)。
【问题讨论】:
-
对不起,我为了发布而稍微重构了我的代码,我已经更新了发布的 sn-ps。
-
用户不应该也有
has_many :roles, :through => :memberships吗? -
目前不需要找到用户在他们所属的组中的所有角色。
标签: ruby-on-rails