2010-06-13 4 views
24

Chcę to hash i listy wewnątrz pliku YAML, że jestem parsowania za pomocą następującego polecenia:Hash w pliku YAML?

APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml") 

Mój plik YAML wygląda następująco:

feeds: [{:url => 'http://www.google.com', :label => 'default'}] 

Ale tego nie robi wydaje się działać. W jaki sposób chciałbym osiągnąć takie coś?

Dzięki, yuval


EDIT: Sorry, chłopaki. Nadal nie mam pojęcia, jak to zrobić i podejrzewam, że jest to częściowo spowodowane moim niejasnym sformułowaniem. Poprosiłem o lepiej sformułowane, szersze pytanie: here. Dziękuję Ci!

Odpowiedz

29

można oznaczyć go jak ten

feeds: 
- 
    url: 'http://www.google.com' 
    label: 'default' 

Uwaga odstęp jest tu ważne. "-" musi być wcięte przez pojedynczą spację (nie tabulator), a za nią spację. I & label musi być wcięty przez dwie spacje (nie są też tabulatory).

Dodatkowo może to być pomocne: odpowiedź http://www.yaml.org/YAML_for_ruby.html

14

Ceilingfish jest być może technicznie poprawne, ale zaleca się stosowanie spacji na końcu linii. Jest to podatne na błędy i nie jest dobrą praktyką!

ten sposób byłoby to zrobić:

Utwórz plik settings.yaml o następującej treści:

--- 
feeds: 
    :url: 'http://www.google.com' 
    :label: 'default' 

stworzy następujące po hash pliku YAML został załadowany:

irb(main):001:0> require 'yaml' 
=> true 
irb(main):002:0> YAML.load_file('settings.yaml') 
=> {"feeds"=>{:url=>"http://www.google.com", :label=>"default"}} 
irb(main):003:0> 

W tym przykładzie używam również symboli, ponieważ wydaje się, że jest to preferowany sposób przechowywania kluczy Ruby w Ruby.

+0

Ale czy to naprawdę dałoby to, o co prosił? Myślę, że chce, by "kanały" były listą skrótów, a nie tylko hashem. Jestem trochę w tym samym miejscu, a także nie lubię delikatnego podejścia wymagającego spływu przestrzeni. Jakieś pomysły? – estan

+0

Nieważne. Rozgryzłem to. Publikuje własną odpowiedź na to pytanie. – estan

4
Stare pytanie, ale ponieważ byłem w podobnym miejscu ... Jak zauważył Jasper, odpowiedź Ceilingfish jest poprawna. Ale możesz także wykonać

, aby uniknąć polegania na końcowych spacji po kresce.