nil.to_i

発生した問題

以下のメソッドが呼ばれているところでbuz_accountsnilになってエラーが発生してしまっておりました。

 

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