:validates_numericality_of中的greater_than_or_equal_to仅部分在rails 3.1中工作

时间:2012-04-17 20:06:08

标签: ruby-on-rails ruby-on-rails-3.1 rspec

我们使用以下内容来检查stock_qty(一个整数或一个浮点数。可能为零但不是零)大于或等于零:

validates_numericality_of :stock_qty, :greater_than_or_equal_to => 0
validates_numericality_of :stock_qty, :less_than_or_equal_to => :in_qty, :if => Proc.new { |part| !part.in_qty.nil? }

:in_qty是零件模型中的一列。此验证应允许正数或0表示:stock_qty。问题是如果:stock_qty被指定为零,则rspec失败。我注意到:less_than_or_equal_to只允许less_than并且不允许equal_to。有没有办法验证rails 3.1中的> =或< =?或者上面的验证码可能出错。非常感谢。

3 个答案:

答案 0 :(得分:16)

尝试添加:only_integer => true,如下所示:

validates_numericality_of :stock_qty, :only_integer => true, :greater_than_or_equal_to => 0

修改

如果在stock_qty为零或零时需要通过,则需要将代码更改为:

validates_numericality_of :stock_qty, :allow_nil => true, :greater_than_or_equal_to => 0
validates_numericality_of :stock_qty, :allow_nil => true, :less_than_or_equal_to => :in_qty, :if => Proc.new { |part| !part.in_qty.nil? }

答案 1 :(得分:10)

validates :stock_qty, :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 }

它适用于我的3.1应用程序,在我的情况下,我有价格,当我更新或添加产品没有价格我得到“这不是一个数字”错误,或类似的东西,但我可以把0价格列,它更新就好了。希望这有帮助。

greater_than_or_equal_to –指定值必须大于或等于提供的值。此选项的默认错误消息是“必须大于或等于%{count}”。

http://guides.rubyonrails.org/active_record_validations_callbacks.html

答案 2 :(得分:1)

你也可以相信nil时有0。 nil未通过此检查。