📌

The Error of The Day (First Posting)

2020/11/30に公開

どうも初めまして!初心者プログラマのAmetaです。
本日より平日は毎日1記事上げていきます。


それでは早速、本日のErrorはこちらです!

モデルの単体テストコードを実行した際に起きたError

商品の価格が半角数字でないと出品できないという"異常系"のテストコードです。
価格には全角の数字を代入してテストをしているはずなのになぜかErrorMessageが表示されない。

他にもいろいろなバリューを代入して試して見ても解決せず...
ということはモデルでのバリデーションの設定に問題があるかもと思い確認してみました。

validates :price, format:{ with: /\A[0-9]+\z/, message: 'should be half-width numbers' }

ちょっとRubyさん。正規表現は間違っていないし、文法的にも合っていますよね?
そう思いながらも、

こちらの記事を発見。

その結果、以下コードにたどり着きました。

validates :price, numericality:{ with: /\A[0-9]+\z/, message: 'should be half-width numbers' }

エラーの原因はバリデーションのフォーマットが間違っていたことでした。

:priceを文字列(string)ではなく数値(integer)の型で登録していたため、formatではなくnumericalityを使わなくてはいけなかったみたいです。

ActiveHashを使うための初めてintegerの型でデータだったから見落としてしまいました。

だけど、もう迷いません。文字列はformat、数値はnumericality!

Discussion