2016-05-11 3 views
0

私は自分のアプリのグループとユーザーをモデル化する方法を見つけようとしており、それを行う正しい方法を見つけるのが難しいです。ユーザーを所有できるグループを所有することができるRailsグループモデル

私はユーザーがいて、私は管理者がいます。私はまだグループのためのモデルを持っていません。私はグループが複数のユーザーを所有できるようにしたいと思います。ユーザーは複数のグループを持つことができます。さらに複雑にするために、グループは他のグループを介して複数のユーザーを持つことができます。

class Group 
    belongs_to :admin 
    has_many :users 
    has_many :users, through: :groups 
end 


class User 
    belongs_to_many :groups 
end 

class Admin 
    has_many :groups 
end 

メンバーシップテーブルが必要だと思います。その後、各ユーザーはメンバーシップを通じてグループに接続されます。しかし、グループ - >グループ - >ユーザーをどのように結び付けることができますか?

class Membership 
    ? 
end 

答えて

0

ここに2つのポインタがあります。

belongs_to_manyは少なくとも私がよく知っている最新のバージョンではありません。おそらくhas_and_belongs_to_manyまたはおそらくhas_many :groups, through: :membershipsを意味します。私はこの後者の形式を以下に使用するつもりです。

Groupクラスでthrough :groupsオプションを使用するには、まず:groupsの関連付けを定義する必要があります。両方のことのメンバーとこのGroupあるUserを持っている任意の他のGroupであるように、すべての場合は、それを定義しようとしている、あなたは簡単にこれを行うことができます。

class Membership 
    belongs_to :user 
    belongs_to :group 
end 

class User 
    has_many :memberships 
    has_many :groups, through: :memberships 
end 

class Group 
    has_many :memberships 
    has_many :users, through: :memberships 
    has_many :groups, through: :users 
end 

あなたはこの協会の名前を変更したい場合があります少し混乱する:

has_many :connected_groups, through: :users, source: :groups 

今、あなたはすべての接続されたグループのユーザーを表しGroupusersの関連付けを定義したいです。別の名前が必要な場合は、同じ名前の2つの関連付けを意味のある形で定義することはできません(どのようにして1つのものと別のものにアクセスしますか?)。ですから、私はconnected_groupsconnected_usersのような名前を使うことをお勧めします。

class Group 
    has_many :memberships 
    has_many :users, through: :memberships 
    has_many :connected_groups, through: :users, source: :groups 
    has_many :connected_users, through: connected_groups, source: :users 
end 
関連する問題