Ok steps to reproduce this:
prompt> rails test_app
prompt> cd test_app
prompt> script/generate model event_service published:boolean
then go into the migration and add not null and default published to false:
class CreateEventServices < ActiveRecord::Migration
def self.up
create_table :event_services do |t|
t.boolean :published, :null => false, :default => false
t.timestamps
end
end
def self.down
drop_table :event_services
end
end
now migrate your changes and run your tests:
prompt>rake db:migrate
prompt>rake
You should get no errors at this time. Now edit the model so that you validate_presence_of published:
class EventService < ActiveRecord::Base
validates_presence_of :published
end
Now edit the unit test event_service_test.rb:
require 'test_helper'
class EventServiceTest < ActiveSupport::TestCase
test "the truth" do
e = EventServer.new
e.published = false
assert e.valid?
end
end
and run rake:
prompt>rake
You will get an error in the test. Now set e.published to true and rerun the test. IT WORKS! I think this probably has something to do with the field being boolean but I can't figure it out. Is this a bug in rails? or am I doing something wrong?