내 모델의 필드가 부울인지 확인하려고하지만 테스트가 계속 실패합니다.레일 : 부울 값의 포함 여부 확인 테스트 실패
이 읽은 후 : Validating boolean value in Rspec and Rails 나는과 같이 그 일을 결국이 Rails: how do I validate that something is a boolean? :
class Model < ActiveRecord::Base
validates :my_field, :inclusion => { :in => [true, false] }
end
내가이에게 (RSpec에와 했어야 매처 (matcher)를 사용하여) 몇 가지 방법을 테스트 해봤를하고 있기 때문에 내 테스트에 계속 실패, 나는 지금 당장 멍청한 (?) 길을 걷고있다. 그래도 테스트는 통과되지 않고 어딘가에서 값을 변환하는 메커니즘이 있다고 추측합니다. 여기
내가 무슨 일이 일어나고 있는지 알아 내기 위하여 사용하고 무엇을 : 나는 무엇을 놓치고
# 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
? 다소 논리적 인 방식으로 값이 변환 된 것으로 보입니다. 그러나이를 방지하려면 어디에서 어떻게해야합니까? 이러한 종류의 유효성 검사를 올바르게 수행하는 방법은 무엇입니까?
감사합니다. 'FALSE_VALUES' /'TRUE_VALUES' 상수에 대해 알지 못했습니다. 그리고 당신의 포괄적 인 대답은 그것을 멋지게 설명합니다! 오늘 뭔가 배웠습니다. – polarblau
나는 부울 필드가 validates_presence_of 일 때, 그것이 틀릴 때마다 검증을 실패한다는 것을 생각한다. 해결 방법은 validates_inclusion_in을 사용하는 것입니다. Rails 3.0.9에서이 동작을 직접 볼 수 있습니다. 여기를 참고하십시오 : http://www.ruby-forum.com/topic/99285 –
레일즈 가이드를 다시 읽고 Validation에 대해 다시 읽었으며, 부울 필드의 유효성을 검사하는 방법을 설명했습니다. 내 첫 번째 본능은 "항상 true 또는 false가 될 것이고 결코 없기 때문에 부울을 검증해야하는 이유는 무엇입니까?"라고했습니다. 나는이지면에 부딪쳤다. 나는 그 밈이 새 이주자들과 함께 시작했다고 생각하며, 좀 갇혀있다. "그들이 어떻게 설명하는지, 그것은 완료되어야한다". 나는 그것이 완전성을 위해 설명되었다고 생각합니다. 단지 2 센트 가치입니다 ... –