2012-08-04 15 views
35

Mis campos son: tax rate y tax amount en los que deseo validar valores positivos.Validación para enteros no negativos y valores decimales

escribí esta validación:

:format => { :with => /\A[+]?\d+\Z/} 

Pero no se está llevando a números con un punto decimal como 4.67. Y me está arrojando un error. ¿Qué tipo de validación funcionará en enteros y valores de coma flotante? por ejemplo: 2, 57, 54.56 debe pasar pero -2.56, -87 debería fallar.

Respuesta

107

¿Esto no funciona?

validates :your_field, :numericality => { :greater_than_or_equal_to => 0 } 

(supongo que para los impuestos siguiente regla será más correcta :)

validates :your_field, :numericality => { :greater_than_or_equal_to => 0, :less_than_or_equal_to => 100 } 
+0

Gracias por la respuesta. Voy a intentarlo. –

+0

es el campo una cuerda o un flotador? Si no es una cadena, no deberías estar haciendo regexp en ella. Algo como este ejemplo sería mejor. Necesitaría una validación que solo compruebe si es <0 – Ultimation

6

que puede usar:

validates :tax_rate, inclusion: { in: 0..5 } 

Permite valores como: 0, 2, 1.2, 3.2

Espero que ayude!

+2

. Utilicé esa misma sintaxis en alguna validación que estaba probando anteriormente pero decidí no usarla. Si un usuario ingresa un valor fuera de ese rango, recibe un error que dice algo así como "el valor no está incluido". Opté por una solución como ': greater_than_or_equal_to' porque al usuario se le presenta un error más significativo. – Tass

Cuestiones relacionadas