在我的ruby应用程序中覆盖yaml的配置?

在我的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#试试看

从我的ruby应用程序重写yaml的配置。我想重写,但现有的nil和false使我感到困惑。我的期望如下(优先级:特定>默认公司>默认基础):

然后,实际:

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