Подтвердить что ты не робот

: more_than_or_equal_to в validates_numericality только частично работает в рельсах 3.1

Мы используем следующее, чтобы проверить, является ли значение запаса (целое число или float, ноль, но не ноль) больше или равно нулю:

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 - это столбец в частичной модели. Эта проверка должна допускать положительный или 0 для: stock_qty. Проблема в том, что rspec не удалось, если: share_qty присвоен ноль. Я заметил, что: less_than_or_equal_to разрешено less_than и не допускает equal_to. Есть ли способ проверить ведомость >= или <= in rails 3.1? Или что может пойти не так с нашим кодом проверки выше. Спасибо.

4b9b3361

Ответ 1

попробуйте добавить :only_integer => true так:

validates_numericality_of :stock_qty, :only_integer => true, :greater_than_or_equal_to => 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? }

Ответ 2

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

Ответ 3

Также вы можете поверить, что было 0, тогда как nil. nil не пройдет эту проверку.