【问题标题】:parsing and composing YAML解析和编写 YAML
【发布时间】:2013-01-20 19:09:09
【问题描述】:

我有一个似乎无法解决的基本问题。

我想在 YAML 文件中存储一小组 Quote,然后使用 Ruby Middlemanapp 在网站中对其进行迭代。我不确定这是我的 YAML 文件组合还是我尝试迭代它的方式或两者兼而有之。

YAML (quotes.yml)

---
quote: "This is a quote"
attribution: "Kate Something"
extras: "Braintree"
---
quote: "Blah blah"
attribution: "Donna Doe"
extras: "Essex"
---
quote: "Blah blah"
attribution: "Donna Doe"
extras: "Essex"

ERB

<% data.quotes.each do |f| %>
  <%= f["quote"] %> #f.quote <%= f["attribution"] %> 
<% end %>

如果我只使用 如果一个接一个地获取所有项目而不考虑键,但找不到迭代它们并指定我想要的键或字段的方法。

http://middlemanapp.com/advanced/local-data/

【问题讨论】:

    标签: ruby yaml middleman


    【解决方案1】:

    在 Yaml 中,--- 在 Yaml 流中启动一个新文档,因此在您的 quotes.yaml 中,您有三个单独的文档,而您只阅读第一个文档。

    我认为你想要的是这样的:

    - quote: "This is a quote"
      attribution: "Kate Something"
      extras: "Braintree"
    
    - quote: "Blah blah"
      attribution: "Donna Doe"
      extras: "Essex"
    
    - quote: "Blah blah"
      attribution: "Donna Doe"
      extras: "Essex"
    

    这是包含地图列表的单个 Yaml 文档。

    【讨论】:

    • 这个解决方案似乎工作正常。一个单独的问题——如果'extras:'有孩子怎么办?如何编写 ERB 以遍历上述 YAML 的子级?另一个问题已在此处发布:stackoverflow.com/questions/15885392/…
    【解决方案2】:

    问题在于您的 YAML 文件格式。

    --- 是文档的标记。 YAML.loadYAML.load_file 不想读多个文档,只看第一个,所以你需要走不同的轨道。

    尝试改用YAML.load_documents(File.read('quotes.yml'))

    irb(main):005:0> asdf = YAML.load_documents(File.read('quotes.yml')) [ [0] { "quote" => "这是一个报价", “归属” => “凯特某事”, “附加” => “布伦特里” }, [1] { "报价" => "废话", “归属” => “唐娜·多伊”, “附加”=>“埃塞克斯” }, [2] { "报价" => "废话", “归属” => “唐娜·多伊”, “附加”=>“埃塞克斯” } ]

    换句话说,您将收到特定数据文件的哈希数组。每个数组元素都是一个不同的文档,被解析回它的 Ruby 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多