2017-04-19 4 views
0

を作成します。 - すべてのユーザーがGROUPE を作成することができます - - のGroupeは、多くのユーザー を持つことができます。しかしGROUPEはジュスト1人の所有者を持っていますグループ内の他のユーザーを招待することができます。ルビー:私はそのようなGROUPEシステムを作成しようと、多くのユーザーを持つグループとワンオーナー

class Groupe 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    has_many :memberships 
    has_many :users 
end 

class Membership 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    belongs_to :user 
    belongs_to :project 
end 

class User 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    has_many :memberships 
    has_many :projects 
end 

私は私のDB(モンゴ)を見ると、このことを私はGROUPEを作成USER_IDが表示されていない、と私がしたい、と私がしたい:私はこのロジックを持っているジュスト瞬間

グループを作成したユーザーが所有者になり、他のユーザーを招待することができます。

誰かがこれを実装する方法を知っていますか?

+0

1人のユーザーに複数のグループがありますか? –

+0

1人のユーザーが多数のグループを作成でき、グループには複数のユーザーが参加することができます –

+0

ユーザーとグループには、n対nという関係があります。欠落しているものがあります:モデル 'UserGroupe'とテーブル' users_groupes'ですか? 'users_groupes'テーブルの' is_owner'(boolean)の列が必要ですか? –

答えて

1

各グループは1つの所有者がいますので、あなたは、このようなグループとユーザーの間に新たな関係を定義することができ、

class Group 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    has_many :users 
    has_one :owner, class_name: 'User' 
end 

class User 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    belongs_to :group  
end 

新しいグループが作成されると、その所有者がまだ設定されていません。

次に、あなたのケースでは現在のユーザーに所有者を設定します。私はこのデモ用に作成しています。この割り当ての利点は、グループ所有権を将来他の人に移転できることです。

owner = g.users.create 
=> #<User _id: 58fd7f47476bf77e8f52c34a, group_id: BSON::ObjectId('58fd7f26476bf77e8f52c349')> 
g.owner = owner 
=> #<User _id: 58fd7f47476bf77e8f52c34a, group_id: BSON::ObjectId('58fd7f26476bf77e8f52c349')> 

今のグループが2人のユーザーを持って

g.users.create 
=> #<User _id: 58fd7fd4476bf77e8f52c34b, group_id: BSON::ObjectId('58fd7f26476bf77e8f52c349')> 
g.users 
=> [#<User _id: 58fd7f47476bf77e8f52c34a, group_id: BSON::ObjectId('58fd7f26476bf77e8f52c349')>, #<User _id: 58fd7fd4476bf77e8f52c34b, group_id: BSON::ObjectId('58fd7f26476bf77e8f52c349')>] 

このグループにユーザーを追加します。

+0

ありがとうございました!それはうまくいく! –

関連する問題