Un vistazo rápido a la validación personalizada de Rails

Recientemente comencé a trabajar con Ruby (casi 2 meses ahora) y Ruby on Rails (un poco más de 3 semanas). Trabajar con el marco Active Record de Rails es una de mis cosas favoritas de Ruby on Rails. En esta publicación, veremos las validaciones en Active Record, particularmente las personalizadas. Aquí hay una introducción rápida a Active Record antes de pasar a lo bueno.

Active Record es una de las gemas centrales que componen Ruby on Rails. Es la parte del marco que se ocupa de las bases de datos.

Es un marco ORM (Object Relational Mapping) que le permite construir un esquema para una base de datos usando ruby ​​puro y se basa en el patrón de diseño Active Record descrito por Martin Fowler. Entonces, con Active Records, está creando su base de datos, creando tablas, almacenando, recuperando y eliminando datos usando ruby, que se traduce a SQL bajo el capó.

Introducción rápida

Supongamos que tenemos un modelo de estudiante con propiedades nombre y apellido. Para usar Active Record solo necesitamos extender ApplicationRecord y cuando lo ejecutamos rails db:migrate nos da la declaración SQL para ello.

Para interactuar con la base de datos, utilizamos métodos heredados de la superclase ApplicationRecord.

También admite asociaciones y otras cosas de bases de datos.

Para obtener una introducción detallada a Active Record, consulte la guía oficial de ruby ​​on rails.

Validación

Debido a que escribimos aplicaciones web para otros usuarios además de nosotros, no podemos estar seguros de que los usuarios siempre ingresen datos válidos en la base de datos. Para hacer cumplir esto, Active Record nos proporciona un marco de mini-validación que asegura la presencia de datos, la unicidad de ciertos campos, etc.

Veamos la tabla de estudiantes de arriba. No quisiéramos crear un usuario sin un nombre o apellido que actualmente es posible. Para mitigar esto, solo necesitamos modificar nuestra clase Student así:

Con esta modificación, cuando crea una instancia de Estudiante sin los atributos de nombre o apellido, es un estudiante no válido y los registros activos no lo conservarán en la base de datos.

El registro activo también nos proporciona métodos para verificar si nuestros datos son válidos o inválidos:

Con esto, ni siquiera tenemos que intentar guardar los datos.

Además de simplemente evitar que los datos se conserven, Active Record también proporciona una lista de errores que contiene los atributos que fallaron en las validaciones y mensajes fáciles de usar para presentar a los usuarios. Se puede acceder a estos errores como se muestra en el fragmento a continuación.

Hay mucho más sobre validación, pero no es el tema de este artículo. Para una inmersión profunda, puede obtener una explicación detallada en el capítulo de la guía Ruby on Rails sobre Validación.

Validación personalizada

A veces, es posible que deseemos usar ciertas validaciones que son más que solo asegurar la presencia de un atributo, longitud, unicidad o cualquiera de los ayudantes proporcionados por Active Record. Afortunadamente, Active Record nos permite definir nuestras propias validaciones personalizadas, que es el objetivo de este artículo.

Entonces, digamos para nuestro modelo de estudiante, tenemos una columna de número de registro de estudiante obligatorio. Tiene que ser llenado desde el formulario de registro (sé que esto se puede generar automáticamente) que siempre debe comenzar con el año de registro. Ahora, Active Record no proporciona este tipo de validación de fábrica, pero nos ha permitido definirlo y usarlo.

Hay principalmente dos formas de definir su propia lógica de validación:

  • Validador personalizado
  • Métodos personalizados

Validador personalizado

Para validar usando un validador personalizado, solo necesita definir su lógica de validación en una clase que extiende ActiveModel :: Validator e implementa el método de validación, que toma el registro para ser validado como su argumento.

Si la validación falla, agrega el atributo a la matriz de errores junto con su mensaje de error. Entonces, en nuestro caso, tendremos RegNumValidator como se ve a continuación:

Para usar este validador en el modelo de Student, usamos el validates_withmétodo:

Con esto, cuando un usuario intenta crear un estudiante con el número de registro incorrecto, la creación del registro falla y se puede mostrar un mensaje de error.

Métodos personalizados

Para usar métodos personalizados para la validación, solo necesita definir un método para usar para la validación en su clase de modelo y llamarlo como llamaría a cualquiera de las validaciones incorporadas: usando validate. Usando la misma lógica que teníamos arriba, nuestro modelo se vería así:

Conclusión

Espero que este artículo le haya brindado los conocimientos necesarios para comenzar a explorar la validación de Active Records y la validación personalizada especialmente. Siempre que tenga una regla de validación que no sea parte de la API de validación de registros activos existente, puede escribir una usted mismo.

Validaciones de registros activos: guías de Ruby on Rails

Las validaciones se utilizan para garantizar que solo se guarden datos válidos en su base de datos. Por ejemplo, puede ser importante… guides.rubyonrails.org