Está en la página 1de 3

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.

También podría gustarte