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にします。
こんな感じですかね。