RailsではInteger型のカラムに0始まりの値は登録できない話
これだけ書くと至極当然の話なのだが、ハマったので自戒を込めてメモ。
DB(MySQL)でinteger型のカラムがあり、そのカラムにデータを登録する際に検証ルールを付けたかったが、何故か入力値がvalidationでうまく処理されない。
例) 入力値: 00001 検証時: 1になる <- なぜ!?
原因はその入力値に対応するDBテーブル上のカラムがinteger型だったため、Railsが勝手に数値に変換してvalidation処理をしていた。
この時はXXXコードのような数字のみの項目か何かで、「5桁ちょうどであること」というルールを付けようとしたが、 入力値のパターンが00001の場合、1に変換されて、結果1桁となり検証エラーになってしまった。
development.logのParametersには{ "code" => "00001" }のように出てるから気づかなかった。。
同僚に相談して指摘され、気が付きました。というか、今まで気にしたことが無かった。。