自定义Rails验证抛出未定义的方法错误

时间:2011-06-02 05:08:32

标签: ruby-on-rails ruby validation

我需要验证字段是否为正值,并在lib / validations.rb中写了一个小的methid,它正是这样做并将其添加到我的模型中。但是,现在我的一个rspec测试失败抱怨...

  

NoMethodError:未定义的方法'<'为零:NilClass“

...当值未定义时。我还在我的模型中添加了validates_presence_of :price,高于我的自定义validates_positive_or_zero方法。

我认为首先调用validates_presence_of,当字段为nil时,它不会进行进一步的验证。我是否必须更改validates_positive_or_zero方法以检查该字段是否存在以解决此问题?谁能让我对正在发生的事情有所了解?

2 个答案:

答案 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