我有一个叫Project
的模型,它可以有任意数量的孩子,而孩子(孩子)可以有任意数量的孩子。基本上我正在使用宝石
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。我做错了什么?
答案 0 :(得分:1)
看起来像hash.merge
does not change the hash in-place。通过拨打hash.merge
将来电替换为hash.merge!
,它应该有效。