Cách tạo danh sách mảng kết hợp trong yaml


81

Tôi đang cố gắng lưu trữ một số biến cấu hình trong yaml được biểu diễn dưới dạng một mảng kết hợp hay còn gọi là từ điển. Đây là cách tôi đã làm:

content_prices:                                                                                                                                                                                                                               
  - {country: AU, price: 6990000}                                                                                                                                                                                                             
  - {country: AT, price: 4990000}                                                                                                                                                                                                             
  - {country: BE, price: 4990000}  

Điều này tạo ra một ngoại lệ khi tôi cố gắng phân tích cú pháp nó từ các tệp init ROR của mình:

phương thức không xác định `Symbolize_keys! ' cho nil: NilClass

Đây là cách tôi cài đặt nó:

Config = YAML.load_file("#{Rails.root}/config/prices.yml")[Rails.env].symbolize_keys!

Tôi đoán cú pháp yaml của tôi là sai, sau đó làm thế nào để viết nó cho đúng?


2
Tôi không thấy các phần dành cho đường ray trong YAML của bạn
Sergio Tishedsev.

Câu trả lời:


162

YAML của bạn có vẻ ổn hoặc bạn có thể định cấu hình một loạt các băm như sau:

content_prices:
  - country: AU
    price: 6990000
  - country: AT
    price: 4990000
  - country: BE
    price: 4990000

Cái nào sẽ tải dưới dạng băm sau:

{"content_prices"=>[
  {"country"=>"AU", "price"=>6990000}, 
  {"country"=>"AT", "price"=>4990000}, 
  {"country"=>"BE", "price"=>4990000}]}

Nhưng điều đó vẫn không cung cấp cho bạn bất kỳ tham chiếu nào đến Rails.envhàm băm chính. Vấn đề dường như là những gì bạn đang mong đợi ở trong hàm băm của mình hơn là định dạng của YAML.


Tôi đoán, đây là cách tiếp cận nội tuyến key: - string1, key: ['string1', 'string2',và đây là ký hiệu hiện đại đối tượng cho kết hợp cú pháp trên không được chấp nhận, - { param1: 'myvalue', param2: 'myvalue2' } stackoverflow.com/a/33136212/3419535 , stackoverflow.com/a/49814618/3419535
FantomX1

12

Không phải trên rails, nhưng trên Symfony2 php, tôi phải định cấu hình tệp yml như sau:

content_prices:
  - 
    quốc gia: AU
    giá: 6990000
  - 
    quốc gia: AT
    giá: 4990000
  - 
    quốc gia: ĐƯỢC
    giá: 4990000

6
Đây là một vấn đề với các phân tích cú pháp để chắc rằng symfony không tôn trọng các đặc điểm kỹ thuật của danh sách, trừ khi có một dòng mới sau khi dash
dreftymac

@dreftymac sự cố này hiện đã được khắc phục chưa? Bạn có thể cung cấp một liên kết đến báo cáo lỗi không?
marcv

@marcv nếu bộ nhớ của tôi phục vụ cho tôi một cách chính xác nó đã được cố định
dreftymac

0

Chỉ trong trường hợp ai đó muốn sử dụng khóa động, cũng có thể:

AppBundle\Service\MailerService:
    lazy: false
    arguments:
      $defaultFrom:
        '%mailer_user%': '%mailer_name%'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.