2010-06-13 3 views
24

Я хочу, чтобы включить хэш и список внутри YAML файл, который я разбор с помощью следующей команды:Хэш внутри файла YAML?

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

Моего файл YAML выглядит следующим образом:

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

Но это не похоже, работают. Как я мог бы достичь такого?

Спасибо, Юваль


EDIT: Извините, ребята. Я все еще не понимаю, как это сделать, и я подозреваю, что это отчасти из-за моей расплывчатой ​​фразы. Я спросил более четко сформулированный, более широкий вопрос: here. Спасибо!

ответ

29

Вы можете отметить его как этот

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

Примечание разнос важно здесь. «-» должен быть отступом одним пробелом (а не вкладкой), а за ним следует одно место. И url & label должен быть отступом двумя пробелами (кроме вкладок).

Кроме того, это может быть полезным: ответ http://www.yaml.org/YAML_for_ruby.html

14

Ceilingfish является, может быть технически правильным, но он рекомендует использовать пустое пространство в конце строки. Это подвержено ошибкам и не является хорошей практикой!

Это, как я хотел бы сделать это:

Создать settings.yaml файл со следующим содержимым:

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

Это создаст следующий хэш после загрузки файла YAML:

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> 

В этом примере я также использую символы, поскольку это, по-видимому, является предпочтительным способом хранения ключей Ruby в Ruby.

+0

Но будет ли это действительно производить то, что он просил? Я думаю, он хочет, чтобы «фиды» были списком хешей, а не только хешем. Я вроде как в одном и том же месте, а также не люблю хрупкий подход, требующий конечного пространства. Есть идеи? – estan

+0

Nevermind. Я понял. Выложите мой собственный ответ на этот вопрос. – estan

4

Старый вопрос, но так как я был в подобном месте ... Как сказал Джаспер, ответ Пойнтфиша верен. Но вы также можете сделать

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

, чтобы избежать необходимости полагаться на конечные пробелы после тире.