如何在Mongoid中做一个自引用模型?

时间:2012-07-19 22:09:01

标签: ruby-on-rails mongodb mongoid

我最近发布了这个问题:How to model a many self-referential relationship with many parents?

我得到了足够的答案,但有人告诉我,我可以使用Mongo / Mongoid更好地建模。我一直想尝试使用不同的数据库范例,所以这可能是一个好的开始。

使用Mongo进行建模会更容易吗?如果是的话,你能帮我解决一下吗?

我基本上有两种选择吗? 1是通过引用Skill id的文档创建一个数组吗?例如,Skill.prerequisites = [Skill1,Skill2,Skill3]。对那种结构有用的东西吗?

否则可能是我需要在该关联上运行逻辑,因此我必须创建一个单独的模型。这是我感到困惑的地方。鉴于我可能需要创建一个单独的模型,它是作为文档还是嵌入文档存在?每个策略有哪些限制?

1 个答案:

答案 0 :(得分:2)

好的,让我们继续你的技巧方法吧。以下是我在Mongoid中对其进行建模的方法:

class Skill
  include Mongoid::Document

  field :prereqruisite_skill_ids, type: Array, default: []

  def prereqruisite_skills
    Skill.any_of(:_id => prereqruisite_skill_ids).all
  end

  def add_prereqruisite!(skill)
    self.prereqruisite_skill_ids << skill
    safely.save!
  end
end

使用Mongo,这是我唯一能做到的方法。

使用ActiveRecord,您可以:

class Skill < AR::Base
  has_many :skill_prereqruisites
  has_many :prerequisites, through: skill_prereqruisites, class_name: "Skill"
end

class SkillPrereqruisite < AR::Base
  belongs_to :skill_one, foreign_key: "skill_one_id"
  belongs_to :skill_two, foreign_key: "skill_two_id"
end