Railsでboolean型の属性を必須にするバリデーション

Rails の ActiveRecord モデルの boolean 型の属性(DBカラム)のバリデーションで、presence: true と何気なく書いたらこの書き方だめでした。

— 環境 —
Rails 4.1

スポンサーリンク

false の時にバリデーションエラーになってNG

例えば email_acceptance という boolean 型(true/false)の属性があったとして、validation で必須にしたい場合に以下のように書くと…

この書き方だと、email_acceptance の値が false の場合に presence: true のバリデーションに引っかかりどうやってもエラーになります。presence: true のバリデーションは、false という値を”存在しない”と判定するっぽいです。最初この書き方をしてて、テストがコケまくって超焦りました。

inclusion を使う

なので、boolean 型を必須にするバリデーションは以下のように書く。

inclusion を使うと email_acceptance の値が false の場合でも、バリデーションエラーにならずに済みます。

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

Leave Your Message!