Escolar Documentos
Profissional Documentos
Cultura Documentos
# => {}
>> p.valid?
# => false
>> p.errors.messages
# => {name:["can't be blank"]}
>> p = Person.create
# => #<Person id: nil, name: nil>
>> p.errors.messages
# => {name:["can't be blank"]}
>> p.save
# => false
>> p.save!
# => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank
>> Person.create!
# => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank
invalid? es simplemente la inversa de valid?. Dispara las validaciones, retornan
do true si cualquier error es encontrado en el ojbeto, y false en caso contrario
.
1.5 errors[]
Para verificar si un atributo en particular de un objeto es vlido, lo puedes veri
ficar utilizando errors[:attribute]. Esto retornar un un array de totos los error
es por :attribute. Si no hay errores en un attributo especfico, es devuelto un ar
ray vacio.
Este mtodo es solo utilizado despus de que las validaciones se han ejectuado, porq
ue solo inspecciona la coleccin de errores y no disparan validaciones por si mism
os. Esto es diferente desde el mtodo ActiveRecord::Base#invalid? que explicamos a
ntes porque este no verifica la validez del objeto no tiene ese objetivo. Solo c
omprueba para ver si hay errores encontrados en un atributo individual del objet
o.
class Person < ActiveRecord::Base
validates :name, presence: true
end
>> Person.new.errors[:name].any? # => false
>> Person.create.errors[:name].any? # => true
Cubriremos los errores de validacin en mayor profundidad en la seccin Trabajando c
on los errores de validacin. Por ahora, vamos a continuar con los helpers (ayudan
tes) de validacin construidos que Rails provee por defecto.
2 Helpers de Validacin
Active Record ofrece muchos helpers de validacin predefinidos que puedes utilizar
directamente dentro de las definiciones de tu clase. Estos helpers proveen las
reglas de validacin comunes. Cada vez que una validacin falla, un mensaje de error
es aadido a la coleccin de errors del objeto, y este mensaje es asociado con el a
ttributo que est siendo validado.
Cada ayudante acepta un nmero arbitrario de nombres de atributos, entonces con un
a simple lnea de cdigo puedes aadir algn tipo de validadacin a varios atributos.
Todos ellos acceptan las opciones :on y :message, las cuales definen cuando la v
alidacin se ejecuta y el mensaje que debera ser aadido a la coleccin errors si falla
, respectivamente. La opcin :on toma uno de los valores :create o :update. Hay un
mensaje de error por defecto pra cada una de los helpers de validacin. Estos men
sajes son utilizados cuando la opcin :message no est especificada. Vamos a repasar
cada uno de los helpers disponibles.
2.1 acceptance
Este mtodo valida si un checkbox en la interfaz de usuarios es chequeado al envia
r un formulario. Esto es tpicamente utilizado cuando el usuario necesita dar su c
onformidad sobre los trminos y servicios de tu aplicacin, confirmndolo despus de lee
r algn texto o algo por el estilo. Esta validacin es muy especfica para aplicacione
s web y esta 'acceptance' no necesita guardarse en ningn sitio de tu base de dato
s (si no tienes un campo para esto, el helper crear un attributo virtual).
class Person < ActiveRecord::Base
validates :terms_of_service, acceptance: true
end
El mensaje de error por defecto de este helper es "must be accepted".
Puede recibir una opcin :accept, la cual determina que valor que ser considerado a
ceptable. Por defecto es "1" y puede ser cambiado facilmente.
class Person < ActiveRecord::Base
validates :terms_of_service, acceptance: { accept: 'yes' }
end
2.2 validates_associated
Deberas utilizar este helper cuando tu modelo tiene asociaciones con otros modelo
s y tambin necesiten ser validados. Cuando intentas guardar tu objeto valid? ser
llamado por cada uno de los objetos asociados.
class Library < ActiveRecord::Base
has_many :books
validates_associated :books
end
Esta validacin trabajar con todos los tipos de asociaciones.
No utilices validates_associated en ambas puntas de tus asociaciones, porque se
llamarn la una a la otra en un ciclo infinito.
El mensaje de error por defecto para validates_associated es "is invalid". Nota
que cada objeto asociado contendra sus propias colecciones errors; los errores n
o escalan hacia el modelo llamadado.
2.3 confirmation
Puedes utilizar este helper cuando tengas dos campos de texto que deban recibir
exactamente el mismo contenido. Por ejemplo, puedes querer confirmar una direcci
on de email y un password. Esta validacin crea un atributo virtual cuyo nombre es
el campo que tiene que ser confirmado con la "_confirmation" aadida.
class Person < ActiveRecord::Base
validates :email, confirmation: true
end
En la plantilla de la vista podras utilizar algo como
<%= text_field :person, :email %>
<%= text_field :person, :email_confirmation %>
Esta comprobacin se lleva a cabo solo si email_confirmation no esnil. Para requer
ir confirmacin, asegurate de aadir una comprobacin presence al atributo de confirma
cin (veremos presence ms adelante en esta gua):
class Person < ActiveRecord::Base
validates :email, confirmation: true