在我的ruby应用程序中覆盖yaml的配置?
从我的ruby应用程序重写yaml的配置。我想重写,但现有的nil和false使我感到困惑。我的期望如下(优先级:特定>默认公司>默认基础): 然后,实际:在我的ruby应用程序中覆盖yaml的配置?,ruby,configuration,yaml,Ruby,Configuration,Yaml,从我的ruby应用程序重写yaml的配置。我想重写,但现有的nil和false使我感到困惑。我的期望如下(优先级:特定>默认公司>默认基础): 然后,实际: specific['company'] NoMethodError: undefined method `[]' for false:FalseClass specific.try(:company) NoMethodError: undefined method `try' for false:FalseClass Object#试试看
specific['company']
NoMethodError: undefined method `[]' for false:FalseClass
specific.try(:company)
NoMethodError: undefined method `try' for false:FalseClass
Object#试试看,activesupport更好吗?哈西?我的应用程序非常小,如果可能的话,我想使用hashie或小型解决方案(不是activesupport)
或者您知道另一种解决方案吗?如果YAML解析失败,则返回false,因此显然没有解析特定的
。即使您解决了这个问题,如果default\u company.yaml
不存在,您也会失败,因为default
将是nil
,因此default['name']
将失败并出现类似错误
话虽如此,您希望合并这些地图:
if default
default_base.merge! default
end
if specific
default_base.merge! specific
end
dafault_base['name']
#=> my name
default_base['company']
#=> my company
default_base['port']
#=> 80
谢谢在本例中,我得到了一个想法:默认值| |={};特定| |={};default_base.merge(默认)。merge(特定)
if default
default_base.merge! default
end
if specific
default_base.merge! specific
end
dafault_base['name']
#=> my name
default_base['company']
#=> my company
default_base['port']
#=> 80