0

我有一个带有连接模型User的模型(参见下面的类定义)。GroupMembership

经过深思熟虑,我决定在 Membership 模型上添加两个属性,用于描述组中的用户角色。该应用程序非常简单,并且不希望添加额外的表来分离组角色的复杂性。

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 属性添加到连接模型,因此我无法在 Membership 模型上分配ownerandcontributor变量,除非我直接创建 Membership 对象,然后在创建组时将其分配给组的成员资格数组,如下所示:

#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
  .....

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

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

4

1 回答 1

1

据我所知,您所展示的是为不在批量分配白名单上的属性分配值的标准方法。

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

于 2013-03-13T17:09:30.637 回答