尝试确定为Rails设置多对多关系的安全方法

时间:2013-03-13 13:32:12

标签: ruby-on-rails-3 rails-activerecord

我有UserGroup模型,其中Membership加入模型(请参阅下面的类defs)。

我已经决定在会员模型上添加两个属性来描述用户对该组的角色。该应用程序非常简单,不希望添加其他表的复杂性来分离组角色。

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模型上分配ownercontributor变量,除非我直接创建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
  .....

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

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

1 个答案:

答案 0 :(得分:1)

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

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