2013-03-13 58 views
0

我有UserGroup连接模型Membership(见下面的类defs)。试图确定安全的方式来设置Rails的多对多关系

我已经决定在经过多次考虑在成员模型中添加两​​个属性,该模型描述了用户对组的角色。该应用程序非常简单,不需要添加额外表格的复杂性来分隔组角色。

class User < ActiveRecord::Base 
    .... 
    has_many :memberships 
    has_many :groups, through: memberships 
end 

class Group < ActiveRecord::Base 
    .... 
    has_many :memberships 
    has_many :users, through: memberships 
end 

class Membership < ActiveRecord::Base 
    .... 
    belongs_to :user 
    belongs_to :group 
    attr_protected :owner, :contributor 
end 

但是,因为我已经加入attr_protected属性的加盟模式,我不能指定的会员制模式的ownercontributor变量,除非我直接创建一个成员对象,然后将其分配给该组的成员阵列当我创建这样的组时:

#Partial group create method on group controller 
@group = Group.new(name: params[:group]) 
@membership = Membership.new(group: @group, user: @user) 
@membership.owner = true 
@membership.contributor = true 
@group.memberships << @membership 

if @group.save 
    ..... 

我试图不允许对所有者/贡献者属性进行批量分配。

是否有更好的方式来创建用户/组成员资格以及安全地设置成员资格的附加属性?

+1

这种做事你不喜欢的方式是什么?或者,相反,不同的方面会使它成为您寻找的“更好的方式”? – MrTheWalrus 2013-03-13 15:08:35

+0

我并不是说这种方式没有任何问题 - 我不确定什么是正确的方式,这是我目前实施的方式。也许有更好的方法:因此问题的原因。 thx – pghtech 2013-03-13 16:07:45

回答

1

据我所知,您所展示的是将值分配给不在群集分配白名单上的属性的标准方式。

我可能将@membership设置为@group.memberships.new(:user => @user)而不是Membership.new(group: @group, user: @user),但这主要是个人编码风格的问题。我相信你会避免使用@group.memberships << @membership,但它是等价的。

+0

谢谢,这正是我正在寻找的。 – pghtech 2013-03-13 18:22:12