我有一个基本问题,我似乎无法理清。
我想在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 %>
如果我只使用&lt;%= f%&gt;如果不管密钥而一个接一个地获取所有项目,但是找不到迭代它们并指定我想要的密钥或字段的方法。
答案 0 :(得分:5)
在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文档。
答案 1 :(得分:2)
问题是您的YAML文件格式。
---
是文档的标记。 YAML.load
和YAML.load_file
不想阅读多个文档,只读取第一个文档,因此您需要采用不同的跟踪方式。
请尝试使用YAML.load_documents(File.read('quotes.yml'))
:
irb(main):005:0> asdf = YAML.load_documents(File.read('quotes.yml')) [ [0] { "quote" => "This is a quote", "attribution" => "Kate Something", "extras" => "Braintree" }, [1] { "quote" => "Blah blah", "attribution" => "Donna Doe", "extras" => "Essex" }, [2] { "quote" => "Blah blah", "attribution" => "Donna Doe", "extras" => "Essex" } ]
换句话说,您将收到特定数据文件的哈希数组。每个数组元素都是一个不同的文档,解析回它的Ruby对象。