这看起来很简单,但我想要一个数字,并确保它不大于或小于预定数量:
validates :age_min, presence: true, numericality: {
greater_than: 0, less_than_or_equal_to: :age_max
}
此测试按预期工作
test 'user should not be valid with age min greater than age max' do
user = FactoryGirl.build(:user, age_min: 30, age_max: 20)
assert !user.valid?
end
但是,当我尝试测试需要age_min
时:
test 'user should not be valid without age_min' do
user = FactoryGirl.build(:user, age_min: nil, age_max: 20)
assert !user.valid?
end
我得到ArgumentError: comparison of Float with nil failed
看起来很奇怪Rails没有考虑零值,或者我错过了什么?看来你应该能够在没有编写自定义验证器的情况下使用它,但也许我错了。
答案 0 :(得分:7)
由于你对age_min id的数值验证依赖于age_max的值而不是固定值,我认为你想要将你的验证拆分并用procs来防范nil值
validates :age_min, :age_max, :presence => true
validates :age_min, :numericality => {greater_than: 0, less_than_or_equal_to: :age_max}, :unless => Proc.new {|user| user.age_min.nil? || user.age_max.nil? }