无法读取和绑定红宝石中的yml数据

时间:2019-06-02 22:48:56

标签: ruby erb

我有一个包含以下内容的yaml文件:

:common
  :substitue
    :foo: fee

我这样读取数据:

data = YAML.load(erb_data[File.basename(__FILE__, '.*')].result(binding))

common = data[:common]

def substitute_if_needed(original_value)
    mapping = common.dig(:substitue, original_value)
    if mapping.nil? ? original_value : mapping
end

不幸的是,这并没有实现我想要的替代。我想打电话给substitute_if_needed('foo')并取回“费用”。我还想打substitute_if_needed('bar')并找回'bar'。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您的代码中存在几个问题:

  1. YAML示例看起来很糟糕。合适的应该看起来像:
var_dump array(1) { 
    [0]=> array(20) { 
        ["sale_id"]=> string(3) "202" 
        ["sale_code"]=> string(9) "201906202" 
        ["buyer"]=> string(1) "1" 
        ["guest_id"]=> NULL 
        ["ref_id"]=> string(2) "19" 
        ["commission"]=> string(4) "8.83" 
        ["grand_total"]=> string(5) "83.63"
        ["payment_status"]=> string(30) "[{"admin":"","status":"paid"}]" 
        ["payment_details"]=> string(4) "none" 
        ["payment_timestamp"]=> NULL 
        ["sale_datetime"]=> string(10) "1559492618" 
        ["delivary_datetime"]=> string(0) "" 
        ["delivery_status"]=> string(65) "[{"admin":"","status":"pending","comment":"","delivery_time":""}]" 
        ["viewed"]=> string(2) "ok" 
    }
}
  1. 您正在尝试使用符号作为密钥来获取common: substitute: foo: fee 中的common密钥,但是它应该是字符串(common = data[:common])。另外,我想将获取逻辑溅入两部分是一个坏主意-首先在data["common"]外部提取“ common”,然后在内部substitute_when_needed提取。

  2. dig语句已损坏。它应该是适当的if或适当的三元运算符。

修复所有这些问题后,我们会得到一些类似的信息(为了方便起见,我已经用StringIO替换了一个文件-使代码段可直接执行):

if
相关问题