从树状结构构建哈希

时间:2015-02-26 16:18:06

标签: ruby-on-rails ruby recursion hash

我有一个叫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。我做错了什么?

1 个答案:

答案 0 :(得分:1)

看起来像hash.merge does not change the hash in-place。通过拨打hash.merge将来电替换为hash.merge!,它应该有效。