2017-04-19 38 views
0

我尝试创建一个GROUPE那种制度: - 阳狮集团可以有很多用户 - 所有用户都可以创建一个GROUPE - 但阳狮集团中庸之道有一个老板谁可以邀请群组中的其他用户。Ruby on Rails的:创建了许多用户和一个所有者组

在我探微此刻有这样的逻辑:

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(蒙戈)我没有看到谁创造阳狮集团user_ID的,我想,我想,这创建群组的用户成为所有者并可以邀请其他用户。

有人知道如何实现这个?

+0

一个用户有很多组? –

+0

一个用户可以创建很多组,并且一个组可以拥有很多用户 –

+0

因此我们可以说用户和组拥有'n到n'的关系。有一些缺失:模型'UserGroupe'和Table'users_groupes'?应该需要表'users_groupes'中的列'is_owner'(布尔值)? –

回答

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 

当创建一个新的组,它的主人尚未设定。

g = Group.create 
=> #<Group _id: 58fd7f26476bf77e8f52c349, > 
g.owner 
=> nil 

然后将所有者设置为用户,也许当前用户在您的情况。我只是为这个演示创建一个。这项任务的好处是,集体所有权可以在未来转移给另一个人。

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

添加更多用户到该组

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

谢谢你的回答!它工作得很好! –