首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >蒙古族的参考1-N和参考N

蒙古族的参考1-N和参考N
EN

Stack Overflow用户
提问于 2014-02-10 16:27:31
回答 1查看 163关注 0票数 0

我正在尝试用Mongoid对我的MongoDB数据库建模,并试图为以下关系创建关系:

  • 用户可以拥有一个项目
  • 项目为用户所有
  • 用户可以是项目中的协作者(但不是所有者)
  • 项目有许多协作者(用户)

因此,基本上,用户可以拥有项目并在项目上进行协作。这是两个不同的角色。所有者,用户,通过1-N关系,可以在项目上执行任务.协作者,用户,通过can关系,可以在项目上执行一组单独的任务。

我想出的解决办法是:

代码语言:javascript
运行
复制
# 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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 18:14:36

根据要求,我将把我的评论变成一个答复:

我建议为每个项目创建一个:owner_id字段,然后在UserProject模型之间创建一个has_and_belongs_to_many关系。然后创建一些简单的函数来确定项目的所有者、合作者等等。

代码语言:javascript
运行
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21682598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档