我将获得名。
billing_address = {
"first_name" => "Jack"
"last_name" => "James"
}
billing_address["first_name"]
但是如果billing_address = nil
,它会出错。
所以我这样更新。
billing_address.present? ? billing_address["first_name"] : nil
还有更好的方法吗?
答案 0 :(得分:2)
您可以尝试使用安全的导航操作符:
nil&.[]('first_name')
# nil
{ "first_name": "Jack", "last_name": "James" }&.[]('first_name')
# "Jack"
或try
:
nil.try(:[], 'first_name')
# nil
{ "first_name": "Jack", "last_name": "James" }.try(:[], 'first_name')
# "Jack"
答案 1 :(得分:1)
假设您的红宝石版本比2.3更新,则可以将安全导航操作符与Hash#dig
结合使用:
irb(main):001:0> { foo: 'bar' }&.dig(:foo)
=> "bar"
irb(main):002:0> nil&.dig(:foo)
=> nil
irb(main):003:0> { foo: { bar: 'baz' }}&.dig(:foo, :bar)
=> "baz"
irb(main):004:0> { foo: { bar: 'baz' }}&.dig(:x, :bar)
=> nil