我需要设计一个系统来跟踪用户成员身份,以不同角色(当前为三个)的组。has_many:通过默认值
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 => ["memberships.role_id= ? ", Grouprole.find_by_name('user')]
但是,在创建组的成员资格时,role_id未设置。
有没有办法做到这一点,因为目前我的组模型中的每个用户角色都有一些重复的代码片段。
修订
应该注意的是什么ID非常喜欢实现类似于
@group.admins << @user
@group.moderators << @user
这东西会让人产生成员到组并设置适当的成员角色(ROLE_ID)。
什么是Grouprole? – 2010-04-26 14:34:04
对不起我重构了我的代码稍微张贴,我已更新张贴的片段。 – 2010-04-26 14:49:42
用户不应该拥有'has_many:roles,:through =>:memberships'? – SztupY 2010-04-26 14:55:18