我正在尝试使用Mongoid为我的MongoDB数据库建模,并尝试为以下关系创建关系:
基本上,用户可以拥有项目并在项目上进行协作。这是两个不同的角色。拥有者,用户,通过1-N关系,可以在项目上执行任务。协作者,用户,通过N-N关系,可以在项目上执行单独的任务集。
我想出的解决方案是:
# app/models/user.rb
class User
include Mongoid::Document
include Mongoid::Timestamps
field :name, type: String
field :email, type: String
field :username, type: String
has_many :projects
end
# app/models/project.rb
class Project
include Mongoid::Document
include Mongoid::Timestamps
field :title, type: String
field :summary, type: String
field :permalink, type: String
field :collaborator_ids, type: Array, default: []
belongs_to :user
def collaborators
arr = []
self.collaborator_ids.each do |id|
arr << User.find(id)
end
arr
end
end
这显然不理想:还有另一种方法吗?我更倾向于使用Mongoid的has_and_belongs_to_many
关系而不是我拥有的数组hack中的ObjectID。
答案 0 :(得分:1)
根据要求,我会将我的评论转到答案:
我建议为每个项目创建一个:owner_id
字段,然后在has_and_belongs_to_many
和User
模型之间创建Project
关系。然后创建一些简单的函数来确定项目所有者是谁,协作者是谁等等
# app/models/project.rb
class Project
include Mongoid::Document
include Mongoid::Timestamps
field :title, type: String
field :summary, type: String
field :permalink, type: String
field :owner_id, type: String
has_and_belongs_to_many :users
def is_owner?(owner_object)
return self.owner_id == owner_object.id
end
# Add more functions here based on your needs
end