以下を使用して、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で> =または<=を検証する方法はありますか?または上記の検証コードで何がうまくいかない可能性があります。どうもありがとうございました。
次のように: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? }
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
また、nil
が存在する間に0が存在したと信じることができます。 nil
はこのチェックに合格しません。