2013-02-05 4 views
2

나는 정리할 수없는 기본적인 질문이 있습니다.YAML을 구문 분석하고 작성

YAML 파일에 작은 견적 세트를 저장하고 Ruby Middlemanapp를 사용하여 웹 사이트에서 반복하고 싶습니다. 나는 그것이 YAML 파일 구성인지, 아니면 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 %> 관계없이 키의 또 다른 후 모든 항목 하나를 얻을 수 있지만 찾을 수 있다면 그 (것)들에 반복하고 나가 원하는 열쇠 또는 ​​분야를 지정하는 방법. YAML에서

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

답변

5

는 ,, ---는 YAML 스트림에서 새 문서를 시작으로 그래서 당신의 quotes.yaml 세 별도의 문서가 당신이 첫 번째를 읽고. 지도의 목록이 포함 된 하나의 YAML 문서를 s입니다

- 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" 

: 나는 당신이 원하는 무슨 생각

이 같은 것입니다.

+0

이 솔루션은 올바르게 작동하는 것 같습니다. 별도의 질문 - '엑스트라 :'에 자녀가 있다면 어떨까요? ERB는 위의 YAML을 통해 반복적으로 작성됩니다. 또 다른 질문은 여기에 게시되었습니다 : http://stackoverflow.com/questions/15885392/accessing-multi-layered-yaml-and-middleman –

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" => "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 객체로 파싱 된 다른 문서입니다.