結合モデルを持つモデルがUser
あります(以下のクラス定義を参照)。Group
Membership
グループへのユーザーの役割を説明する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
.....
所有者/寄稿者のプロパティの一括割り当てを許可しないようにしています。
ユーザー/グループメンバーシップを作成し、メンバーシップの追加属性を安全に設定するためのより良い方法はありますか?