我最近发布了这个问题:How to model a many self-referential relationship with many parents?
我得到了足够的答案,但有人告诉我,我可以使用Mongo / Mongoid更好地建模。我一直想尝试使用不同的数据库范例,所以这可能是一个好的开始。
使用Mongo进行建模会更容易吗?如果是的话,你能帮我解决一下吗?
我基本上有两种选择吗? 1是通过引用Skill id的文档创建一个数组吗?例如,Skill.prerequisites = [Skill1,Skill2,Skill3]。对那种结构有用的东西吗?
否则可能是我需要在该关联上运行逻辑,因此我必须创建一个单独的模型。这是我感到困惑的地方。鉴于我可能需要创建一个单独的模型,它是作为文档还是嵌入文档存在?每个策略有哪些限制?
答案 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