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

use*_*363 10 rspec ruby-on-rails ruby-on-rails-3.1

我们使用以下内容来检查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? }
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*tes 16

尝试添加:only_integer => true如下:

validates_numericality_of :stock_qty, :only_integer => true, :greater_than_or_equal_to => 0
Run Code Online (Sandbox Code Playgroud)

编辑

如果当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? }
Run Code Online (Sandbox Code Playgroud)


rma*_*002 10

validates :stock_qty, :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 }
Run Code Online (Sandbox Code Playgroud)

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

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

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