2010-06-13 24 views
24

tôi muốn bao gồm một băm và danh sách bên trong một file YAML rằng tôi đang phân tích với các lệnh sau:Hash bên trong tệp YAML?

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

file YAML của tôi trông như thế này:

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

Nhưng điều này không dường như hoạt động. Làm cách nào để tôi đạt được một điều như vậy?

Cảm ơn, Yuval


EDIT: Xin lỗi, guys. Tôi vẫn chưa rõ về cách làm điều này và tôi nghi ngờ một phần là do một số lời nói hơi mơ hồ của tôi. Tôi đã hỏi một câu hỏi mở rộng hơn, rộng hơn here. Cảm ơn bạn!

Trả lời

29

Bạn có thể đánh dấu nó lên như thế này

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

Lưu ý khoảng cách là quan trọng ở đây. "-" phải được thụt vào bởi một dấu cách đơn (không phải là một tab), và tiếp theo là một dấu cách. Và url & label phải được thụt vào bởi hai dấu cách (không phải là tab).

Ngoài này có thể hữu ích: Câu trả lời http://www.yaml.org/YAML_for_ruby.html

14

Ceilingfish là có thể đúng về mặt kỹ thuật, nhưng ông đề nghị sử dụng một khoảng trắng ở phần cuối của một đường thẳng. Điều này là dễ bị lỗi và không phải là một thực hành tốt!

Đây là cách tôi sẽ làm điều đó:

Tạo một file settings.yaml với các nội dung sau:

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

này sẽ tạo ra các hash sau sau khi file YAML đã được tải:

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> 

Trong ví dụ này, tôi cũng sử dụng các ký hiệu vì đây có vẻ là cách ưu tiên để lưu trữ các khóa Ruby trong Ruby.

+0

Nhưng điều này thực sự sẽ sản xuất những gì anh ta yêu cầu? Tôi nghĩ anh ấy muốn "nguồn cấp dữ liệu" là danh sách các băm, không chỉ là một băm. Tôi thuộc cùng một chỗ, và cũng không thích cách tiếp cận mong manh đòi hỏi không gian phía sau. Bất kỳ ý tưởng? – estan

+0

Nevermind. Tôi đã hiểu rồi. Sẽ đăng câu trả lời của riêng tôi cho câu hỏi này. – estan

4

Câu hỏi cũ, nhưng vì tôi đã ở một vị trí tương tự ... Giống như Jasper đã chỉ ra, câu trả lời của câu trả lời là đúng. Nhưng bạn cũng có thể làm

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

để tránh phải dựa vào dấu khoảng trắng sau dấu gạch ngang.