我尝试创建这样的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的用户成为所有者并且可以邀请其他用户。
有人知道如何实现这个吗?
答案 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')>]
现在该小组有两个用户。