Ruby on rails:创建具有许多用户和一个所有者的组

时间:2017-04-19 15:22:32

标签: ruby-on-rails mongoid

我尝试创建这样的groupe系统: - 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(mongo)时,我没有看到创建groupe的user_id,我想,并且我希望创建groupe的用户成为所有者并且可以邀请其他用户。

有人知道如何实现这个吗?

1 个答案:

答案 0 :(得分: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')>]

现在该小组有两个用户。