Хорошо шаги для репродуцирования этого:
prompt> rails test_app
prompt> cd test_app
prompt> script/generate model event_service published:boolean
затем войдите в миграцию и добавьте не пустой и значение по умолчанию, опубликованное ко лжи:
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
теперь переместите свои изменения и запустите свои тесты:
prompt>rake db:migrate
prompt>rake
Вы не должны получать ошибки в это время. Теперь отредактируйте модель так, чтобы Вы опубликованный validate_presence_of:
class EventService < ActiveRecord::Base
validates_presence_of :published
end
Теперь отредактируйте модульный тест event_service_test.rb
:
require 'test_helper'
class EventServiceTest < ActiveSupport::TestCase
test "the truth" do
e = EventService.new
e.published = false
assert e.valid?
end
end
и выполненные грабли:
prompt>rake
Вы получите ошибку в тесте. Теперь набор e.published к истинному и повторно выполненному тест.Работает! Я думаю, что это, вероятно, имеет некоторое отношение к полю, являющемуся булевской переменной, но я не могу понять это. Действительно ли это - ошибка в направляющих? или я делаю что-то не так?
Смотрите API docs...
Если вы хотите проверить наличие булевого поля (где реальными значениями являются true и false), вы должны использовать validates_inclusion_of :field_name, :in => [true, false].