2

解決できないような基本的な質問があります。

Quote の小さなセットを YAML ファイルに保存し、Ruby Middlemanapp を使用して Web サイトで反復処理したいと考えています。それが私の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 %>

<%= f %> を使用すると、キーに関係なくすべてのアイテムを次々に取得できますが、それらを反復処理して必要なキーまたはフィールドを指定する方法が見つかりません。

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

4

2 に答える 2

5

Yaml---では、Yaml ストリームで新しいドキュメントを開始するため、quotes.yaml3 つの個別のドキュメントがあり、最初のドキュメントだけを読んでいます。

あなたが欲しいと思うのは次のようなものです:

- 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" => "これは引用です"、
        "attribution" => "Kate Something"、
             "extras" => "Braintree"
    }、
    [1] {
              "quote" => "Blah blah"、
        "attribution" => "Donna Doe"、
             "extras"=>"エセックス"
    }、
    [2] {
              "quote" => "Blah blah"、
        "attribution" => "Donna Doe"、
             "extras"=>"エセックス"
    }
]

つまり、特定のデータファイルのハッシュの配列を受け取ります。各配列要素は異なるドキュメントであり、解析されてRubyオブジェクトに戻されます。

于 2013-02-05T20:09:57.900 に答える