Railsのvalidates :numericalityのバリデーションでnilを許可

スポンサーリンク
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました

フィールドの入力値が数値であることを保証するために、Rails の ActiveRecord ビルトインのバリデーションである validates :numericality を使おうとしたところ、どうやら普通に使うと presence: true のバリデーションを暗黙的に含むようで、nil や blank? が true となるような値が弾かれました。ということで、nil や blank? が true な値を許可しつつ、入力値は数値となる書き方を調べた。

スポンサーリンク

— 環境 —
Rails 4.1.6

普通に numericality: true だと nil を受け付けない

以下のようにモデルに普通に書きますと、自動的に presence: true のバリデーションも有効になるようで、空欄にしたフォームのフィールド(値が nil)を受け付けません。

:allow_blank オプションを true にする

:allow_blank オプションを true にして、validates :numericality を使ったところ、意図したとおりに nil または blank な値を許可しつつ、入力値は数値となるバリデーションを有効にできました。以下のいずれかのように書く。

以上です。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!