Creando Validaciones Personalizadas en Ruby on Rails

Rails nos ofrece validaciones básicas para poder controlar los valores que vamos a persistir en nuestra base de datos. Algunas de ellas son por ejemplo: uniqueness, presence, length, etc. Si en nuestro modelo Person tenemos 3 campos, identification_number, name y surname, podríamos fácilmente corroborar que no se repitan usuarios con el mismo número de identificación, que todos tengan nombre y apellido, y que estos no superen, por ejemplo, los 20 carácteres.

Validaciones personalizadas

Pero esto no es todo, Rails nos ofrece la posibilidad de crear nuestras propias validaciones para aquellos casos en los que queremos realizar algo más específico. Supongamos que tenemos una aplicación en la que registramos la creación de cajas, y que queremos que nuestras cajas rojas sean por ejemplo, más anchas que altas y que nuestras cajas azules sean lo opuesto, más altas que anchas. Para esto, podríamos usar el método validate (sin S) de la siguiente manera:

Validaciones en una clase aparte

Si no quisiéramos cargar nuestro modelo con estas validaciones, también tenemos la opción de realizarlas en una clase aparte. Por ejemplo, si quisiéramos validar que el color de la caja sea alguno de los 2 que están disponibles (rojo o azul), podríamos hacerlo de esta forma:

Estas validaciones que heredan del validador de ActiveModel, nos dan flexibilidad para evaluar uno o más atributos de un modelo a la vez. Rails también nos ofrece otro tipo de validador, que nos permite evaluar un atributo a la vez. Por ejemplo, si quisiéramos validar que según el color, las cajas puedan soportar un peso máximo distinto, podríamos crear un validador como el siguiente:

Y en nuestra clase, solamente deberíamos añadir la opción correspondiente en el validates:

Usar validaciones estándar cuando sea posible

Aunque las validaciones personalizadas son una herramienta poderosa y flexible en Rails, es importante tener en cuenta que en muchos casos, las validaciones estándar pueden cumplir con los requisitos sin añadir complejidad innecesaria. En lugar de recurrir siempre a validaciones personalizadas, considera utilizar las validaciones integradas que Rails ofrece, ya que a menudo son suficientes para manejar situaciones comunes. En nuestro caso donde validamos el peso que soporta una caja según su color, lo podríamos haber realizado de la siguiente manera:

Cerrando

Las validaciones personalizadas en Rails son una herramienta poderosa que permite garantizar la consistencia y calidad de los datos. Con las opciones flexibles que Rails ofrece, podemos manejar fácilmente escenarios complejos, como validaciones basadas en condiciones o el uso de validadores externos. Esto no solo mejora la legibilidad de nuestro código, sino que también facilita su mantenimiento y escalabilidad.

Recordemos también, que para cualquier duda, tenemos a disposición la documentación oficial que está muy completa.