2012-11-29 48 views
2

這似乎是那種一個沒有腦子的,但我想需要數量,並確保它不小於預定量更大或更小:Rails 3的驗證numericality拋出參數錯誤時,空白/零

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沒有考慮到nil值,或者我錯過了什麼似乎很奇怪?看來你應該能夠在不寫一個自定義驗證器的情況下工作,但也許我錯了。

+0

無論你驗證出和保護拆分您的驗證正在運行。 「存在:真實」驗證不會停止運行的數字驗證。我認爲你需要一個:除非=> Proc類型條件的數值驗證,但我不知道句法。 –

回答

7

由於依賴於age_max的價值,而不是一個固定值的numericality驗證了age_min ID,我想你想對零值與特效

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? } 
+0

那麼看起來像迄今爲止最清潔的方式。謝謝! –

相關問題