如果object为null的获取属性的更好方法

时间:2019-12-12 21:27:54

标签: ruby-on-rails ruby

我将获得

billing_address = {
  "first_name" => "Jack"
  "last_name" => "James"
}
billing_address["first_name"]

但是如果billing_address = nil,它会出错。 所以我这样更新。

billing_address.present? ? billing_address["first_name"] : nil

还有更好的方法吗?

2 个答案:

答案 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