Rails – BigDecimalの値がnilで計算が上手くできない場合

エラー内容

RailsでBigDecimal型の値が「nil」だと、以下のエラーメッセージが出て上手く計算できない時がある。


nil can't be coerced into BigDecimal

対処法

to_s からの to_d

「nil」を一旦String型に変換し、再度BigDecimal型に戻すと計算ができるようになる。


decimal = nil
decimal.to_s  # ""
decimal.to_s.to_d  # 0.0

それでも発生するエラー

String型に to_d が使えない?
Rubyのバージョン(2.4から)によっては、String型に to_d メソッドが使えない場合がある。


ArgumentError - invalid value for BigDecimal(): "":

対処法

その場合は、以下のgemによりStringクラスを上書きして to_d を使えるようにする。


gem "bigdecimal", ">= 1.3.2"

Problem solved!

Sources

兵庫県西宮市生まれのフリーランスRailsエンジニア。案件によってWordPressの作業も請け負ったりしてます。2014年から2016年にかけてオーストラリアで生活。 現在は東京を拠点に活動。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です