nil.to_i
発生した問題
以下のメソッドが呼ばれているところでbuz_accountsがnilになってエラーが発生してしまっておりました。
def has_multiple_buz?(foo_item)
foo_item.bar_item
.buz_accounts
.pluck(:buz_id)
.uniq
.length > 1
end
以下のようにnilガードを挟み対策したのですが、最後の比較演算子の部分でundefined method `>' for nil:NilClassが起きておりました。
def has_multiple_buz?(foo_item)
foo_item.bar_item
&.buz_accounts
&.pluck(:buz_id)
&.uniq
&.length > 1
end
条件分岐でもさせようか、、と思っていたところ、以下の記事を発見しました。
https://qiita.com/sgtn/items/0cb16ef16d938cf98094
どうやらnilに対してto_iメソッドを実行すると0になってくれるようです!!
def has_multiple_buz?(foo_item)
foo_item.bar_item
&.buz_accounts
&.pluck(:buz_id)
&.uniq
&.length.to_i > 1
end
無事エラーが起きなくなりました!
感想その他
上記の記事にも書いてありましたが、nil.to_i => 0 以外にも、
’’.to_i => 0
true.to_i => NoMethodError
false.to_i => NoMethodError
とかもあるようで面白いなと思いました!!
るびまで読んだことある気もしますが、実際の業務で役立つ場面に出くわすと印象に残って覚えられますねw