Edited at

Railsで頻発する NoMethodError for nil をかっこよく避けよう!

More than 1 year has passed since last update.


みなさんよくレコードいじってると、nilに悩まされるとおもいます。

こんな感じ

puts Order.first.client.address.street

# => NoMethodError: undefined method `client' for nil:NilClass


そうすると真っ先に思いつく解決策はこれ

うーん汚いですねwww

No way!

order = Order.first

if order && order.client && order.client.address
puts order.client.address.street
end
# => nil


そこで次に思いつくのはRailsのactivesupportを使った方法

order = Order.first

puts order.try(:client).try(:address).try(:street)
# => nil

まぁあまぁあイケてますね〜


ただruby2.3以降ならもっといけてる方法が!

order = Order.first

puts order&.client&.address&.street
# => nil

これです、swift,c#にもあるsafe navigation operatorという機能を使えばいいのです!


この記事はmediumのある記事をサクッと翻訳、要約したものです。本家には#digの紹介もあるのでぜひご覧ください!


参照

mediumのページ