Хеш внутри файла YAML? - PullRequest
25 голосов
/ 14 июня 2010

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

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

Мой файл YAML выглядит так:

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

Но, похоже, это не работает. Как бы я пошел к достижению такой вещи?

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


РЕДАКТИРОВАТЬ: Извините, ребята. Мне все еще неясно, как это сделать, и я подозреваю, что это отчасти из-за моих несколько смутных фраз. Я задал более формулированный, более широкий вопрос здесь . Спасибо!

Ответы [ 3 ]

30 голосов
/ 14 июня 2010

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

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

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

Дополнительно это может быть полезно: http://www.yaml.org/YAML_for_ruby.html

14 голосов
/ 14 июня 2013

Ответ 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.

5 голосов
/ 18 марта 2015

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...