ruby - 用 ruby​​ 迭代一个 yaml 数组

标签 ruby arrays

我将 YAML.load_file 应用于我的示例文件:

---
languages:
  - name: "English"
    iso_639: "en"
    native_name: "English"
    region:
      - ''
      - UK
      - US
  - name: "Klingon"
    iso_639: "tlh"
    native_name: "tlhIngan Hol"
    region:
      - notearth

我想遍历这些语言和区域数组。这不起作用:

records.each do |record|
  record.region.each do |region|
    self.create!
  end
end

record.region 给我一个未知的区域方法错误。我如何遍历语言及其区域?或者,如何访问区域数组?

最佳答案

您的代码中有两个错误:

  1. 加载 YAML 文件后得到的对象不是数组,它是一个散列,假设文件名为 foo.yml:

    YAML.load_file('foo.yml')
    # => {"languages"=>[{"name"=>"English", "iso_639"=>"en", ...
    

    因此您必须像下面这样修改您的代码以使其工作:

    records['languages'].each do |record|
      # ...
    
  2. region 不是 hash record 的方法,它是一个键,你必须使用 record['region '].

您必须使用的正确代码是:

records['languages'].each do |record|
  record['region'].each do |region|
    # My guess is you are going to use `region` inside this block
    self.create!
  end
end

关于ruby - 用 ruby​​ 迭代一个 yaml 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22350738/

相关文章:

ruby - cucumber + 阿鲁巴岛 + Windows : Tests don't see last line of stdout?

ruby-on-rails - 如何在转换后的字符串不充满反斜杠的情况下将哈希转换为 JSON

javascript - 从对象数组创建字符串的最简单方法

Ruby,Telnet,无超时读取多行响应

ruby - ruby IO.get 是否从缓冲区读取?

c - 为什么数组元素的总和最终总是打印相同的值?

c++ - 数组中的 gldrawpixel rgb 值

PHP 从获取数组创建一个数组

ruby-on-rails - 如何在 Apache 上运行 ruby ?

javascript - typescript - 无法访问 Array.some 中的 "this"