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?
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
Rails 4/5
validates :name, absence: true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With