web-dev-qa-db-ja.com

:greater_than_or_equal_to in validates_numericality_of only partly working in 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? }

:in_qtyは、パーツモデルの列です。この検証では、:stock_qtyに対して正または0を許可する必要があります。問題は、:stock_qtyにゼロが割り当てられている場合にrspecが失敗することです。 :less_than_or_equal_toはless_thanのみを許可し、equal_toは許可しないことに気づきました。 Rails 3.1で> =または<=を検証する方法はありますか?または上記の検証コードで何がうまくいかない可能性があります。どうもありがとうございました。

12
user938363

次のように: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? }
16
Eric Sites
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

10
rmagnum2002

また、nilが存在する間に0が存在したと信じることができます。 nilはこのチェックに合格しません。

1
jdoe