У меня есть модель под названием Project
, которая может содержать любое количество детей, а дети (дети) могут иметь любое количество детей. В основном я использую gem https://github.com/collectiveidea/awesome_nested_set, чтобы достичь этого (структура дерева) Я хочу построить хеш, как hash[child.id] = child.name
в порядке родительства. Для примера. У меня есть 3 проекта (1,2,3), проект № 2 является дочерним по проекту № 1, проект №3 и проект №1 являются корнями. В результате я хочу хэш, который будет выглядеть как {1=> name1, 2=> name2, 3=> name3}
Построить хэш из древовидной структуры
Я знаю, это должно быть сделано рекурсивно, но я застрял с помощью следующего кода
def self.build_tree_of_projects(project)
hash = {}
project.children.each do |child|
hash[child.id] = "#{' ' * child.level + '»' + ' '}#{child.try(:name)}"
next unless child.children.present?
hash.merge(self.build_tree_of_projects(child)) if child.children.present?
end
hash
end
Это просто возвращает меня хэш с 1 парой, когда должно быть ~ 5. Что я делаю не так?
черт возьми, точно, пропустил это. Спасибо – Avdept
'hash.merge!' Aka 'hash.update'. –