我有一个包含以下内容的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'。
我该怎么做?
答案 0 :(得分:3)
您的代码中存在几个问题:
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"
}
}
您正在尝试使用符号作为密钥来获取common:
substitute:
foo: fee
中的common
密钥,但是它应该是字符串(common = data[:common]
)。另外,我想将获取逻辑溅入两部分是一个坏主意-首先在data["common"]
外部提取“ common”,然后在内部substitute_when_needed
提取。
dig
语句已损坏。它应该是适当的if
或适当的三元运算符。
修复所有这些问题后,我们会得到一些类似的信息(为了方便起见,我已经用StringIO替换了一个文件-使代码段可直接执行):
if