Gra*_*ett 2 validation ruby-on-rails ruby-on-rails-3
这看起来很简单,但我想要一个数字,并确保它不大于或小于预定数量:
validates :age_min, presence: true, numericality: {
greater_than: 0, less_than_or_equal_to: :age_max
}
Run Code Online (Sandbox Code Playgroud)
此测试按预期工作
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
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试测试时,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
Run Code Online (Sandbox Code Playgroud)
我明白了 ArgumentError: comparison of Float with nil failed
Rails没有考虑零值,或者我错过了什么,这似乎很奇怪?看来你应该能够在没有编写自定义验证器的情况下使用它,但也许我错了.
由于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? }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2231 次 |
| 最近记录: |