めもめも のーと

ハマったこととか、覚えたこととか

RailsではInteger型のカラムに0始まりの値は登録できない話

これだけ書くと至極当然の話なのだが、ハマったので自戒を込めてメモ。

DB(MySQL)でinteger型のカラムがあり、そのカラムにデータを登録する際に検証ルールを付けたかったが、何故か入力値がvalidationでうまく処理されない。

例)
入力値: 00001
検証時: 1になる <- なぜ!?

原因はその入力値に対応するDBテーブル上のカラムがinteger型だったため、Railsが勝手に数値に変換してvalidation処理をしていた。

この時はXXXコードのような数字のみの項目か何かで、「5桁ちょうどであること」というルールを付けようとしたが、 入力値のパターンが00001の場合、1に変換されて、結果1桁となり検証エラーになってしまった。

development.logのParametersには{ "code" => "00001" }のように出てるから気づかなかった。。

同僚に相談して指摘され、気が付きました。というか、今まで気にしたことが無かった。。