Validaciones
Las validaciones garantizan que sólo información válida se almacene en la base de datos.
Existen varios lugares en donde uno puede realizar validaciones: en la base de datos directamente, en el cliente utilizando JavaScript y en los modelos.
Aunque la validación en los modelos no anula la validación en la base de datos o en el cliente, los modelos ofrecen un sitio conveniente en dónde definir las validaciones.
Si quieres clonar nuevamente el proyecto y ubicarte la rama de este capítulo ejecuta los siguientes comandos:
Creando nuestra primera validación
Las validaciones se definen dentro de los modelos utilizando generalmente el método validates
:
¿Cuándo ocurren las validaciones?
Las validaciones ocurren cuando invocas alguno de los siguientes métodos:
create
create!
save
save!
update
update!
valid?
invalid?
Los métodos que terminan con !
lanzan una excepción si el registro es inválido. Los demás, excluyendo valid?
e invalid?
retornan el objeto si las validaciones pasan o false
de lo contrario.
Por ejemplo, el siguiente código crea un nuevo artículo e intenta guardarlo. Si el método save
no retorna false va a mostrar "Se guardó bien!". De lo contrario va a mostrar los errores separados por coma (,
):
Mostrando los errores en el formulario
Existen varias formas de mostrar los errores del modelo en un formulario. La más fácil es mostrar todos los errores antes de los campos. Abre el archivo app/views/books/_form.html.erb
y transcribe el siguiente código después del div
con clase card-body
:
Cuando un campo tiene un error, Rails lo envuelve en un div
con clase field_with_errors
, así que abre app/assets/stylesheets/application.scss
y agrega lo siguiente al final del archivo:
Los errores aparecerán en Inglés. Más adelante aprenderemos cómo traducirlos.
Validaciones incluídas
Rails incluye varias validaciones predefinidas que puedes utilizar en tus modelos.
Presencia
Para validar que ciertos atributos no sean vacíos o nil
utiliza la opción presence
.
Por ejemplo, en el siguiente código estamos validando que los atributos :name
, :login
e :email
no sean nil
ni vacíos:
Booleanos
Para validar que un atributo booleano no sea nil
debes usar la siguiente validación en vez de presence
:
Incusión y exclusión
Para validar que uno o más atributos estén incluídos o excluídos de un conjunto utiliza las opciones inclusion
y exclusion
respectivamente:
Números
Para verificar que uno o más atributos contienen sólo valores numéricos utiliza la opción numericality
:
Además de only_integer
las opciones que le puedes pasar a numericality
son:
Longitud de una cadena
Utiliza la opción length
:
Para ver la lista completa de validaciones te recomendamos la guía oficial de Rails.
Last updated