如何与许多父母建立许多自我指涉关系?

我想以最简单的方式模拟以下内容:

技能有许多依赖技能。

每项技能都应该独立存在,技能可能具备其他技能,这些技能是必备技能。

例如:

Skill: Front-End Development Has Dependent Skills -> [HTML, CSS, SCSS] Skill: Web-Design Has Dependent Skills -> [HTML, CSS] Skill: HTML 

我希望能够做到:

 @front_end_development.dependent_skills ##or a more semantic mapping 

我可能想走上树,但我想不出最好的名字。 也许我想通过HTML引用Web-Design依赖它。


这种自我指涉是否有意义,或者事实是这会伤害我的大脑代码味道并乞求其他东西是理想的? 这一切都取决于其他技能的技能。

用mongo模拟这个会更好吗?

每次需要检索技能的所有依赖项时,您可能只是在向特定技能添加新依赖项时迭代隐含的依赖项,并将这些依赖项保存到名为的表中,而不是遍历树(实际上更像是有向图) ‘依赖’,将技能映射到依赖,反之亦然。 例如(关系可能更好):

 class Skill has_many :dependers, class_name: 'Dependency', foreign_key: :dependee_id has_many :dependees, class_name: 'Dependency', foreign_key: :depender_id has_many :dependencies, through: :dependees has_many :depending, through: :dependers def add_dependency(skill) recurse_dependencies(skill) end def recurse_dependencies(skill) # perform this check to avoid circular and duplicate dependencies if !depender_ids.include?(skill.id) && !dependee_ids.include?(skill.id) dependee_ids << skill.id end skill.dependencies.each do |dependency| recurse_dependencies(dependency) end end end class Dependency belongs_to :dependee belongs_to :depender end 

那么你应该能够做到这样的事情:

 @front_end_development.dependencies @front_end_development.depending @front_end_development.add_dependency(@html)