読者です 読者をやめる 読者になる 読者になる

tryを2回使うなら、mapで繋げてみる

最近はコードを短くことにはまってます。

リファクタリング好きな人の気持ちがわかりました。

今回はtryを2回使うパターンですね。

そんなのあるか?って思いますが、ありました!

特定の子モデルのテキスト内容の長さを比較する場合などです。

user.blogs.body.length
=>NoMethodError: undefined method `body' for nil:NilClass

例えば、上記の場合はまず、blogsがないとbodyでNGになります。

user.blogs.try(:body).length
=> NoMethodError: undefined method `length' for nil:NilClass

lengthがnilなので、errorになります。

ダサいけど、こう書けます。

user.blogs.try(:body).try(:length)
=> nil

なんかダサくて嫌だったので、mapでつないでみます。

user.blogs.try(:map) { |x| x.body.length }.to_i
=> 0

最後のto_iはない場合はnilが返ってくるので、数値比較のためなら、to_iでつないで0にします。

こんな感じですかね。