我有一个看起来像这样的哈希:
items:
item:
attribute_a: cheese
attribute_b: bacon
item:
attribute_a: salmon
item:
attribute_a: mushrooms
attribute_b: steak
我想得到attribute_b
的值,我正在使用以下内容:
if (result['attribute_b'])
// do something
end
但如果缺少attribute_b
,我会收到错误:
The Identifier specified does not exist, undefined method '[] for nil:NilClass'
检查attribute_b
是否存在的(最佳)正确方法是什么?
答案 0 :(得分:2)
看起来您在访问属性'attribute_b'
时没有收到错误,但因为result
为零。
The Identifier specified does not exist, undefined method [] for nil:NilClass`
它说你在零值上调用方法[]
。您唯一要拨打的电话' []
'是result
。
您访问'attribute_b'
的方式通常是可以接受的 - 我可能会更具体并说:
if (result && result.has_key? 'attribute_b')
// do something
end
这将确保result
存在并确保该属性不为null。
答案 1 :(得分:0)
首先,你的YAML结构看起来很糟糕(是YAML吗?)。您不能使用密钥item
包含多个具有多个元素的哈希,因为密钥必须是唯一的。你应该使用数组。
我建议你按照这里的方式构建YAML:
items:
-
attribute_a: cheese
attribute_b: bacon
-
attribute_a: salmon
-
attribute_a: mushrooms
attribute_b: steak
然后你可以做
require 'yaml'
result = YAML.load(File.open 'foo.yml')
result['items'][0]['attribute_b']
=> "bacon"