-1

如何在 ruby​​ 中生成父子嵌套数据结构?

def get_data_tree
  @zones = Zone.select(:parent_id, :id, :name).all
  @result = []
  @zones.each do |zone|
    ap zone[:name]
    ap "*" * 10
    zone         = zone.as_json.with_indifferent_access
    zone[:label] = zone[:name] unless zone.include? :label

    @result << zone if zone[:parent_id].nil?
    @zones.each do |item|
      item = item.as_json.with_indifferent_access
      next if item[:id] == zone[:id]
      if item[:parent_id] == zone[:id]
        item[:label]    = item[:name] unless item.include? :label
        zone[:children] = [] unless zone.include? :children
        ap item[:name]
        ap "-" * 10
        zone[:children] << item
        ap zone
      end
    end
  end

  @result
end

生成数据以提供元素ui https://element.eleme.cn/#/zh-CN/component/cascader

当我使用具有相同逻辑的perl代码可以生成数据结构时,请提供一些建议,非常感谢

4

1 回答 1

1

您的逻辑看起来几乎可以工作,但是您通过引入一个新变量将其搞砸了@result,该变量仅存储zones没有父 ID。这是一个简化的固定实现:

def get_data_tree
  @zones = Zone.select(:parent_id, :id, :name).all.map do |zone|
    zone.as_json.with_indifferent_access.merge(children: [], label: zone.name)
  end


  @zones.each do |zone|
    next if zone[:parent_id].nil?
    @zones.select { |zone| zone[:parent_id] == zone[:id] }
      .each { |child_zone| zone[:children] << child_zone }
  end

  @zones
end
于 2021-07-13T12:14:33.507 回答