Rails: how do I validate that something is a boolean?

Since Rails 3, you can do:

validates :field, inclusion: { in: [ true, false ] }

I believe for a boolean field you will need to do something like:

validates_inclusion_of :field_name, :in => [true, false]

From an older version of the API: "This is due to the way Object#blank? handles boolean values. false.blank? # => true"

I'm not sure if this will still be fine for Rails 3 though, hope that helped!


When I apply this, I get:

Warning from shoulda-matchers:

You are using validate_inclusion_of to assert that a boolean column allows boolean values and disallows non-boolean ones. Be aware that it is not possible to fully test this, as boolean columns will automatically convert non-boolean values to boolean ones. Hence, you should consider removing this test.


You can use the shorter version:

validates :field, inclusion: [true, false]

Extra thought. When dealing with enums, I like to use a constant too:

KINDS = %w(opening appointment).freeze

enum kind: KINDS

validates :kind, inclusion: KINDS