richard
richard

Reputation: 1585

Rails presence validation fails on value 0

I have a model similar to the following,

class Activity < ActiveRecord::Base
    attr_accessible :name, :admin

    validates :name, :presence => true
    validates :admin, :presence => true
end 

The name property is a string and the admin property is defined as a boolean in the migration.

If I try to create an instance of the model in the console using,

a = Activity.create(:name => 'Test', :admin => 0)

Then the validation fails saying I need to provide a value for Admin. Why? I have supplied a value.

I could understand if I had failed to supply a value at all or if I had supplied nil. But why does a value like 0 (or even false for that matter) cause validation to fail?

Upvotes: 10

Views: 4394

Answers (2)

pmargreff
pmargreff

Reputation: 82

Rails 4/5

validates :name, absence: true

Upvotes: 1

zetetic
zetetic

Reputation: 47578

validates :presence uses blank? to determine whether a value is present. But false.blank? => true. So the validation fails, because blank? is telling ActiveRecord that no value is present.

You can rewrite this as:

validates :field_name, :inclusion => { :in => [true, false] }

as recommended in Rails Guides: ActiveRecord Validations

see also A concise explanation of nil v. empty v. blank in Ruby on Rails

Upvotes: 21

Related Questions