Я пытаюсь обеспечить, чтобы поле моей модели было логическим, но мои тесты продолжают терпеть неудачу.
После прочтения этого: Проверка логического значения в Rspec и Rails и Rails: как я могу проверить, что что-то является boolean? Я закончил так:
class Model < ActiveRecord::Base
validates :my_field, :inclusion => { :in => [true, false] }
end
Я пробовал проверить это несколько разных способов (используя rspec и consa matchers), и поскольку мои тесты продолжают работать, я сейчас до самого невероятного (?) пути. Тем не менее, тесты не проходят, и я предполагаю, что есть какой-то механизм, который где-то преобразует значение.
Вот что я использую, чтобы узнать, что происходит:
# create instance without setting value ...
# these work as expected
model_instance.valid?.should be_false # passes
model_instance.my_field = true
model_instance.valid?.should be_true # passes
model_instance.my_field = false
model_instance.valid?.should be_true # passes
# works as expected
model_instance.my_field = ""
model_instance.valid?.should be_false # passes
# these should pass but fail
model_instance.my_field = "foo"
model_instance.my_field.should == "foo" # fails as well, my_field == false
model_instance.valid?.should be_false # fails
model_instance.my_field = "false"
model_instance.my_field.should == "false" # fails as well, my_field == false
model_instance.valid?.should be_false # fails
model_instance.my_field = "123"
model_instance.valid?.should be_false # fails
model_instance.my_field = "true"
model_instance.my_field.should == "true" # fails as well, my_field == true
model_instance.valid?.should be_false # fails
Что мне не хватает? Кажется, значение конвертируется несколько логично, но где и как его предотвратить? Как правильно выполнить такую проверку?