jueves, 30 de octubre de 2008

Validar que un atributo sea numerico (validates_numericality_of)

Cuando deseamos validar que un atributo de nuestro modelo sea numerico, lo que podemos hacer es agregarle la siguiente linea al modelo, esta validación incluye opciones que nos permiten hacer que el atributo este en un rango determinado entre otras cosas:

validates_numericality_of :atributo_a_validar, :opciones

Cuando el atributo al que se le desea validar si es numerico no cumple con lo que se le especifica en las opciones el mismo es agregado a una lista de errores que tiene el objeto del modelo.

:atributo_a_validar - es el atributo al cual deseamos validarle el largo

:opciones - las opciones deben ir separadas por comas

  • :message => mensaje, nos permite cambiar el mensaje que está asociado por defecto a el error, el mensaje por defecto es el siguiente "is not a number".
  • :on => nos define en que momento se va a hacer dicha validación por defecto es en el salvado del objeto, pero se puede especificar :create o :update.
  • :only_integer => nos especifica que el objeto a validar solo puede ser un entero por defecto esta en false.
  • :allow_nil => esquiva esta validación si el objeto es nil, esta opcion esta por defecto en false
  • :greater_than => especifica que el valor del atributo debe ser mayor que el numero que le indiquemos.
  • :greater_than_or_equal_to => especifica que el valor del atributo debe ser mayor o igual que el numero que le indiquemos.
  • :equal_to => especifica que el valor del atributo debe ser igual que el valor que le indiquemos
  • :less_than => especifica que el valor del atributo debe ser menor que el valor que le indiquemos
  • :less_than_or_equal_to => especifica que el valor que le indiquemos debe ser menor o igual que el valor que le indiquemos
  • :odd => indica que el atributo debe ser impar
  • :even => nos indica que el atributo debe ser par
  • :if => especifica un metodo, procedimiento o string que se utiliza para saber si realizar la validacion, este metodo debe retornar un valor booleano
  • :unless => especifica un metodo, procedimiento o string que se utiliza para saber si no se debe realizar la validacion, este metodo debe retornar un valor booleano
Ejemplos:

Valida el atributo number del modelo cuando el mismo se actualiza

validates_numericality_of :number, :on => :update 

Valida que el atributo number del modelo sea mayor que 10

validates_numericality_of :number, :greater_than => 10

Valida que el atributo number del modelo sea mayor o igual que 5 y menor que 10

validates_numericality_of :number, :greater_than_or_equal_to => 5, :less_than => 10

Valida que el atributo number del modelo sea igual a 2 si el atributo name es igual a "pepe"

validates_numericality_of :number, :equal_to => 2, :if => :name_validation

def name_validation
  self.name == "pepe"
end

No hay comentarios: