【问题标题】:Adding more keys to a list of hash conditionally有条件地向哈希列表添加更多键
【发布时间】:2021-11-20 05:30:30
【问题描述】:

您好,我有一个与此类似的问题 (Add a key value pair to all hashes in an array of hashes),但有点复杂

def location_records(options)
  materials = [
    {
      name: 'object1'
      area: 'USA'
    },
    {
      name: 'object2'
      area: 'USA'
    }
  ]

  materials.map!{ |material| record_additional_info(material, options) if %w[USA].include?(options.extra_fields_required) }
end

def record_additional_info(materials, options)
  materials[:zip] = 63123
  materials[:state] = 'Missouri'
  materials[:city] = 'Kansas City'
end

假设我有这个 - 我有一个哈希数组 [{name: 'object1', area: 'USA'}, {name: 'object2', area: 'USA'}]

仅当我提供的字符串列表中包含 extra_fields_required 时,我只想选择性地将其他键添加到哈希中,仅说 USA。

所以这个的输出应该是 [{name:'object1',区域:'USA',邮编:63123,州:'密苏里',城市:'堪萨斯城'},{name:'object2',区域:'USA',邮编:63123,州:'密苏里',城市:'堪萨斯城'}]

但由于某种原因,我不断 -

NoMethodError:“堪萨斯城”的未定义方法“每个”:字符串

【问题讨论】:

  • 在上面运行代码 sn -p 或多行代码时是否看到错误?

标签: ruby-on-rails ruby hashmap


【解决方案1】:

您应该从调用的方法返回 material 哈希

def location_records(options)
  materials = [
    {
      name: 'object1',
      area: 'USA'
    },
    {
      name: 'object2',
      area: 'USA'
    }
  ]

  materials.map!{ |material| record_additional_info(material) if %w[USA].include?(options.extra_fields_required) }

  puts materials     # Prints modified array of hashes
end

def record_additional_info(material)
  material[:zip] = 63123
  material[:state] = 'Missouri'
  material[:city] = 'Kansas City'

  material     # Return the hash object
end

输出:

{:name=>"object1", :area=>"USA", :zip=>63123, :state=>"Missouri", :city=>"Kansas City"}
{:name=>"object2", :area=>"USA", :zip=>63123, :state=>"Missouri", :city=>"Kansas City"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多