Esta gua te ensea como validar el estado de los objetos antes de guardarse en la b
ase de datos utilizando las caracterticas de valicacin de Active Record.
Despus de leer esta gua, conocers: Cmo utilizar los mtodos para construir mtodos de ayuda a las validaciones Active Re cord. Cmo crear tus propios mtodos de validacin a medida. Cmo trabajar con los mensajes de error generados por el proceso de validacin. Chapters Resumen de las Validaciones Por qu Utilizamos Validaciones? Cuando Ocurren las Validaciones? Saltando las Validaciones valid? e invalid? errors[] Helpers de Validacin acceptance validates_associated confirmation exclusion format inclusion length numericality presence absence uniqueness validates_with validates_each Common Validation Options :allow_nil :allow_blank :message :on Strict Validations Conditional Validation Using a Symbol with :if and :unless Using a String with :if and :unless Using a Proc with :if and :unless Grouping Conditional validations Combining Validation Conditions Performing Custom Validations Custom Validators Custom Methods Working with Validation Errors errors errors[] errors.add errors[:base] errors.clear errors.size Displaying Validation Errors in Views 1 Resumen de las Validaciones Aqu hay un ejemplo de una validacin muy simple: class Person < ActiveRecord::Base validates :name, presence: true end
Person.create(name: "John Doe").valid? # => true
Person.create(name: nil).valid? # => false Como puedes ver, nuestra validacin nos hace saber que nuestro objeto Person no es vlido sin un atributo name. La segunda instancia de Person no ser guardado en la base de datos. Antes de entrar en ms detalles, hablaremos de como las validaciones quedan en el cuadro general de nuestra aplicacin. 1.1 Por qu Utilizamos Validaciones? Las validaciones son utilizadas para asegurarse que solo datos vlidos son guardados dentro de l a base de datos. Por ejemplo, esto puede ser muy importante para que tu aplicacion se asegure que todos los usuarios proveen una direccin de corre o electrnico y una direccin postal vlidas. Las validaciones del nivel del Modelo, son la mejor manera de asegurar que solo los datos vlidos son guardados en la base de datos. Son independientes del motor de base de datos, no los pueden sobrep asar los usuarios finales, y son recomendables pa ra probar y mantener. Rails los hace fcil de uti lizar, provee mtodos ayudantes construdos previ amente para las necesidades ms comunes, y te perm ite crear tus propias validaciones tambin. Hay varias otras maneras de validar los datos ant es de guardarlos en tu base de datos, incluyendo una restricciones nativas de la base de datos, va lidaciones del lado del cliente y validaciones en al nivel del controlador. Aqu un resumen de las mismas: Restricciones de la base de datos, y/o procedimie ntos almacenados que hacen el mecanismo de valida cin dependiente del motor de la base de datos y pueden hacer las pruebas y el mantenimiento ms d ificil. Sin embargo, si tu base de datos es utili zada por otras aplicaciones, puede ser una buena i dea utilizar algunas restricciones en el nivel de base de datos. Adicionalmente, las validaciones en el nivel de base de datos, pueden mantener la seg uridad en algunas cosas (por ejemplo la unicidad e n tablas muy grandes) que son dificiles de impleme ntar de otra manera. Las validaciones del lado del cliente suelen ser utilizadas, pero son generalmente poco confiables si se utilizan solas. Si son implementadas utiliz ando JavaScript, pueden ser sobrepasadas si el Jav aScript est quitado en el navegador del usuario. Sin embargo, si se combinan con otras tcnicas, la s validaciones del lado del clientes pueden ser un a manera conveniente de proporcionar una respuesta inmediata a quienes utilicen tu pgina. Las validaciones en el nivel del controlador puede n ser temporarlmente utilizadas, pero frecuentement e se vuelven incomprensibles y dificiles de probar y mantener. Simpre que sea posible, es una buena ide
a mantener los controlaroes limpios, esto har que
sea un placer trabajar en tu aplicacin a largo pla zo. Eljelas con certeza, en casos especficos. Esta es la opinin del equipo de Rails que las validacio nes al nivel del modelo son las ms apropiadas en la mayora de las circunstancias. 1.2 Cuando Ocurren las Validaciones? Hay dos clases de objetos Active Record: aquellos qu e se corresponden a un registro en la base de datos y los que no. Cuando creas un objeto nuevo, por ejem plo usando el mtodo new, ese objeto no pertenece a la base de datos an. Una vez que llamas al mtodo s ave el objeto recin ser guardado en la tabla apro piada de la base de datos. Active Record utiliza el mtodo de instancia new_record? para determinar si un objeto est ya en la base de datos o no. Consid era la siguente clase Active Record: class Person < ActiveRecord::Base end Podemos ver como trabaja mirando algunas salidas en rails console: $ bin/rails console >> p = Person.new(name: "John Doe") => #<Person id: nil, name: "John Doe", created_at: nil, updated_at: nil> >> p.new_record? => true >> p.save => true >> p.new_record? => false Al crear y guardar un nuevo registro se enviar una operacin SQL INSERT a la base de datos. En cambio a l actualizar un registro existente enviaremos una op eracin SQL UPDATE. Las validaciones son tipicamente ejecutadas antes que estos comoandos se envien a la base de datos. Si alguna validacin falla, el objeto ser marcado como invlido y Active Record no crear las operaciones INSERT o UPDATE. De lo contrario se guardara un objeto invlido en la base de datos. Pu edes elegir tener validaciones especficas ejecutand ose cuando un objeto es creado, guardado o actualiza do. Hay muchas maneras para cambiar el estado de un objeto en la base de datos. Algu nos metodos dispararn validaciones, pero otros no lo harn. Esto significa que es p osible guardar un objeto en la base de datos en un estado invlido si no tienes cu idado.