14

我们正在使用以下内容来检查 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 是零件模型中的一列。此验证应允许 :stock_qty 为正数或 0。问题是如果 :stock_qty 分配为零,则 rspec 失败。我注意到 :less_than_or_equal_to 只允许 less_than 而不允许 equal_to。有没有办法验证 Rails 3.1 中的 >= 或 <=?或者我们上面的验证代码可能出了什么问题。非常感谢。

4

4 回答 4

23

尝试: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? }
于 2012-04-17T20:18:36.283 回答
11
于 2012-04-17T21:40:47.280 回答
1

你也可以相信有 0 而有nil. nil不会通过这个检查。

于 2012-04-17T20:32:04.623 回答
0

For Rails > 6.1.0

class User < ApplicationRecord
 validates :age, numericality: { greater_than_or_equal_to: 18, less_than_or_equal_to: 65 }
end

I find the answer in this link

I hope it was easy and clear

于 2022-01-31T10:56:35.550 回答