2012-04-17 11 views
10

Estamos utilizando el siguiente para comprobar si stock_qty (un número entero o un flotador podría ser cero, pero no nula.) Es mayor o igual a cero:: greater_than_or_equal_to en validates_numericality_of sólo parcialmente de trabajo en los carriles 3,1

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 es una columna en el modelo de parte. Esta validación debería permitir positivo o 0 para: stock_qty. El problema es que el rspec falló si: stock_qty tiene asignado cero. Noté que: less_than_or_equal_to solo permitía less_than y no permitía equal_to. ¿Hay alguna manera de validar el> = o el < = en los rieles 3.1? O qué puede salir mal con nuestro código de validación anterior. Muchas gracias.

+0

El código anterior parece estar bien ... – user938363

Respuesta

15

intento de añadir :only_integer => true así:

validates_numericality_of :stock_qty, :only_integer => true, :greater_than_or_equal_to => 0 

EDITAR

si esto tiene que pasar cuando stock_qty es nula o cero es necesario cambiar el código para esto:

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? } 
+0

Recién añadido: stock_qty podría ser entero o flotante. Gracias. – user938363

+0

: only_integer => true no cambió el resultado de rspec. – user938363

+0

¿Tiene que pasar esta prueba si stock_qty es nulo o cero? –

1

también puedes creer que hubo 0 mientras hubo nil. nil no pasará esta comprobación.

+0

¿Quisiste decir que cero y nada se tratan igual en la validación? – user938363

+0

No, todo lo contrario: podría escribir algo como 'Model1.new.valid?' Y obtendría 'false' mientras' stock_qty' era 'nil'. Esa es la única explicación que se tiene en cuenta (porque espero que no hayas hecho otra validación para tu modelo que falla y te olvidaste de él). – jdoe

7
validates :stock_qty, :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 } 

funciona en mi 3.1 aplicación, en mi caso tengo precio, y cuando puedo actualizar o añadir el producto wthout precio me dieron el "no es un número" de error, o algo así, pero no puedo poner una columna de 0 en el precio y se actualiza muy bien. espero que esto ayude.

: greater_than_or_equal_to – Especifica que el valor debe ser mayor o igual que el valor suministrado. El mensaje de error predeterminado para esta opción es "debe ser mayor o igual que% {count}".

http://guides.rubyonrails.org/active_record_validations_callbacks.html

+0

Intentó exactamente lo mismo usando valida, rspec aún falló con stock_qty == 0. Gracias. – user938363

+0

Sin embargo, en la consola de rieles, está bien guardar un registro con 0 stock_qty. Parece que rspec falló pero pasó el modelo real. ¡Extraño! – user938363

Cuestiones relacionadas