从 tree-like 结构构建散列

Build hash from tree-like structure

我有一个名为 Project 的模型,它可以有任意数量的 children,而 children(child) 可以有任意数量的 child仁。基本上我使用 gem https://github.com/collectiveidea/awesome_nested_set实现这个(tree-kind结构) 我想按照父母的顺序构建像 hash[child.id] = child.name 这样的哈希。 对于前。我有 3 个项目(1、2、3),项目#2 是项目#1 的 child,项目#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

它只是 return 我用 1 对哈希,什么时候应该是 ~5。我做错了什么?

看起来像hash.mergedoes not change the hash in-place。将对 hash.merge 的调用替换为对 hash.merge! 的调用,它应该可以工作。