0

結合モデルを持つモデルがUserあります(以下のクラス定義を参照)。GroupMembership

グループへのユーザーの役割を説明する2つの属性をメンバーシップモデルに追加することを検討した結果、私は決定しました。アプリケーションは十分に単純であり、グループの役割を分離するために追加のテーブルの複雑さを追加する必要はありません。

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オブジェクトを直接作成し、次のようにグループを作成するときにそれをグループのメンバーシップ配列に割り当てない限り、Membershipモデルに変数をowner割り当てることはできません。contributor

#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 に答える