我正在尝试用Mongoid对我的MongoDB数据库建模,并试图为以下关系创建关系:
因此,基本上,用户可以拥有项目并在项目上进行协作。这是两个不同的角色。所有者,用户,通过1-N关系,可以在项目上执行任务.协作者,用户,通过can关系,可以在项目上执行一组单独的任务。
我想出的解决办法是:
# 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
关系,而不是数组黑客中的ObjectID。
发布于 2014-02-11 18:14:36
根据要求,我将把我的评论变成一个答复:
我建议为每个项目创建一个:owner_id
字段,然后在User
和Project
模型之间创建一个has_and_belongs_to_many
关系。然后创建一些简单的函数来确定项目的所有者、合作者等等。
# 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
https://stackoverflow.com/questions/21682598
复制相似问题