我需要验证字段是否为正值,并在lib / validations.rb中写了一个小的methid,它正是这样做并将其添加到我的模型中。但是,现在我的一个rspec测试失败抱怨...
NoMethodError:未定义的方法'<'为零:NilClass“
...当值未定义时。我还在我的模型中添加了validates_presence_of :price
,高于我的自定义validates_positive_or_zero
方法。
我认为首先调用validates_presence_of
,当字段为nil
时,它不会进行进一步的验证。我是否必须更改validates_positive_or_zero
方法以检查该字段是否存在以解决此问题?谁能让我对正在发生的事情有所了解?
答案 0 :(得分:2)
Rails已经有了这个:
http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_numericality_of
使用:greater_than => 0
答案 1 :(得分:0)
所有验证程序都在运行,无论它们是否定义了它们。这样,错误数组中充满了所有验证错误,允许最终用户修复所有错误,而不是一次只修复一个错误。
所以是的,您需要检查该字段是否存在值,并且该值可以与数字进行比较。例如,您可能还需要考虑该值可以是除数字之外的任何值 - 空字符串可能是值 - 这也会导致错误。
但这都是学术性的,因为斯蒂芬指出,只需使用validates_numericality_of :field, ::greater_than_or_equal_to => 0