In plaats van elke keer dat u alle afhankelijkheden voor een vaardigheid moet ophalen, door de boom te gaan (meer als een gerichte grafiek eigenlijk), kunt u de impliciete afhankelijkheden herhalen wanneer u een nieuwe afhankelijkheid aan een bepaalde vaardigheid toevoegt en deze opslaat in een tabel met de naam 'Afhankelijkheid' die een vaardigheid koppelt aan een afhankelijkheid en vice versa. Bijvoorbeeld (de relaties zouden beter geformuleerd kunnen worden):
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
U zou dan in staat moeten zijn om dingen te doen als:
@front_end_development.dependencies
@front_end_development.depending
@front_end_development.add_dependency(@html)