14

以下を使用して、stock_qty (整数または浮動小数点数。ゼロである可能性がありますが、nil ではない) がゼロ以上かどうかを確認します。

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 が nil または 0 のときにこれを渡す必要がある場合は、コードを次のように変更する必要があります。

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 があったと信じることもできますnilnilこのチェックに合格しません。

于 2012-04-17T20:32:04.623 に答える
0

Rails > 6.1.0 の場合

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

このリンクで答えを見つけます

簡単で分かりやすかったと思います

于 2022-01-31T10:56:35.550 に答える