2

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

我想在 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"

再培训局

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

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

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

4

2 回答 2

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 文档。

于 2013-02-05T19:47:21.533 回答
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" => "这是一个报价",
        “归属” => “凯特某事”,
             “附加” => “布伦特里”
    },
    [1] {
              "报价" => "废话",
        “归属” => “唐娜·多伊”,
             “附加”=>“埃塞克斯”
    },
    [2] {
              "报价" => "废话",
        “归属” => “唐娜·多伊”,
             “附加”=>“埃塞克斯”
    }
]

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

于 2013-02-05T20:09:57.900 回答