ActiveRecord - 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.

Creando nuestra primera validación

Las validaciones se definen dentro de los modelos utilizando generalmente el método validate:
1
class Article < ApplicationRecord
2
validates :title, presence: true
3
end
Copied!

¿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 (,):
1
article = Article.new(title: "Mi primer artículo")
2
if article.save
3
puts "Se guardó bien!"
4
else
5
puts article.errors.full_messages.join(", ")
6
end
Copied!
Más adelante vamos a ver cómo trabajar con los errores de las validaciones.

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:
1
class Person < ApplicationRecord
2
validates :name, :login, :email, presence: true
3
end
Copied!

Booleanos

Para validar que un atributo booleano no sea nil debes usar la siguiente validación en vez de presence:
1
validates :boolean_field_name, inclusion: { in: [true, false] }
Copied!

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:
1
validates :size, inclusion: { in: %w(small medium large), message: "%{value} is not a valid size" }
2
validates :legacy_code, format: { with: /\A[a-zA-Z]+\z/, message: "only allows letters" }
Copied!

Números

Para verificar que uno o más atributos contienen sólo valores numéricos utiliza la opción numericality:
1
class Player < ApplicationRecord
2
validates :points, numericality: true
3
validates :games_played, numericality: { only_integer: true }
4
end
Copied!
Además de only_integer las opciones que le puedes pasar a numericality son:
1
validates :points, numericality: { greater_than: 5 }
2
validates :points, numericality: { greater_than_or_equal_to: 5 }
3
validates :points, numericality: { equal_to: 5 }
4
validates :points, numericality: { less_than: 5 }
5
validates :points, numericality: { less_than_or_equal_to: 5 }
6
validates :points, numericality: { other_than: 5 }
Copied!

Longitud de una cadena

Utiliza la opción length:
1
class Person < ApplicationRecord
2
validates :name, length: { minimum: 2 }
3
validates :bio, length: { maximum: 500 }
4
validates :password, length: { in: 6..20 }
5
validates :registration_number, length: { is: 6 }
6
end
Copied!
Para ver la lista completa de validaciones te recomendamos la guía oficial de Rails.
Last modified 3yr ago