Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Configurar la validación de documentos

En esta guía, aprenderá a definir reglas de validación en sus modelos Mongoid. Tras implementar la validación en sus modelos, Mongoid le impedirá ejecutar operaciones de escritura que infrinjan las reglas de validación. Utilice la validación de documentos para restringir los tipos de datos y los rangos de valores de los campos de documentos en sus colecciones.

Incluye Mongoid ActiveModel::Validations de Active Record para proporcionar funcionalidad de validación, incluyendo un validador de asociación y de unicidad. Para obtener más información, consulta el Validaciones de registros activos guía de Rails y ActiveModel::Validations documentación de la API de Rails.

Nota

Comparación de la validación de Mongoid y MongoDB

La validación en Mongoid solo se aplica en el contexto de la aplicación y difiere de la creación de reglas de validación de esquemas en MongoDB. Esto significa que las reglas de validación no se aplican a las operaciones de escritura realizadas fuera de la aplicación. Para obtener más información sobre la validación de esquemas en MongoDB, consulte Validación de esquemas en el manual del servidor.

Mongoid admite ayudantes de validación de registros activos que puede usar al definir sus clases de modelo. Puede usar estos ayudantes para establecer reglas de validación comunes en su aplicación, como comprobar la presencia de un campo, comparar el valor de un campo con un valor especificado o garantizar que un campo tenga un valor único.

Utiliza la macro validates para crear una regla de validación, luego incluye el asistente de validación y las especificaciones necesarias para la regla.

Tip

Cada asistente de validación acepta uno o más nombres de campo, lo que le permite definir la misma regla para múltiples campos.

El siguiente código demuestra cómo utilizar el asistente de validación presence para requerir que las instancias Person contengan un valor para el campo name:

class Person
include Mongoid::Document
field :name, type: String
validates :name, presence: true
end

Puede aprender sobre otros útiles asistentes de validación en la sección Validaciones comunes de esta guía.

En esta sección puedes aprender sobre las siguientes reglas de validación comunes y ver ejemplos que utilizan asistentes de validación:

Puede utilizar el ayudante comparison para validar un documento según el valor de un campo específico.

El asistente comparison admite las siguientes opciones:

  • greater_than: El valor debe ser mayor que el valor proporcionado.

  • greater_than_or_equal_to: El valor debe ser mayor o igual que el valor proporcionado.

  • equal_to:El valor debe ser igual al valor suministrado.

  • less_than: El valor debe ser inferior al valor proporcionado.

  • less_than_or_equal_to: El valor debe ser menor o igual al valor proporcionado.

  • other_than: El valor debe ser diferente al valor suministrado.

Este ejemplo define las siguientes reglas de validación de comparación en el modelo Order:

  • delivery_dateDebe ser posterior (mayor) al valor de order_date

  • quantity: Debe ser menor que 5

class Order
include Mongoid::Document
field :order_date, type: DateTime
field :delivery_date, type: DateTime
field :quantity, type: Integer
validates :delivery_date, comparison: { greater_than: :order_date }
validates :quantity, comparison: { less_than: 5 }
end

Puedes utilizar el asistente format para validar un documento en función de si el valor de un campo coincide con una expresión regular. Utiliza la opción with para especificar la expresión regular.

Este ejemplo define una regla de validación de formato en el modelo User para garantizar que el campo username contenga solo letras:

class User
include Mongoid::Document
field :username, type: String
validates :username, format: { with: /\A[a-zA-Z]+\z/ }
end

Tip

Método asistente alternativo

El módulo Mongoid::Document proporciona métodos macro para ciertas validaciones. En lugar de usar el asistente de validación format en la sentencia de macro validates, puede usar el método validates_format_of, como se muestra en el siguiente código:

validates_format_of :username, with: /\A[a-zA-Z]+\z/

Puedes usar los asistentes inclusion y exclusion para validar un documento en función de si el valor de un campo se encuentra en una lista de valores especificada. Utiliza la opción in para especificar la lista de valores.

Este ejemplo define una regla de validación de inclusión en el modelo Order para asegurar que el valor del campo shipping sea uno de los valores aceptados:

class Order
include Mongoid::Document
field :shipping, type: String
validates :shipping, inclusion: { in: %w(standard priority overnight) }
end

Puedes utilizar los asistentes presence y absence para validar un documento según la presencia o ausencia (vacío) de un valor en un campo.

Este ejemplo define una regla de validación de ausencia en el modelo Order para garantizar que el valor del campo delivery_date sea nil o una string vacía:

class Order
include Mongoid::Document
field :delivery_date, type: String
validates :delivery_date, absence: true
end

Tip

Método asistente alternativo

El módulo Mongoid::Document proporciona métodos macro para ciertas validaciones. En lugar de usar el asistente de validación presence en la sentencia de macro validates, puede usar el método validates_presence_of, como se muestra en el siguiente código:

validates_presence_of :delivery_date

Puedes usar el asistente uniqueness para validar un documento según si el valor de un campo es único con respecto a otros valores en la colección. Puedes usar la opción scope para especificar uno o más nombres de campos que Mongoid utiliza para limitar la verificación de unicidad.

Este ejemplo define una regla de validación de unicidad en el modelo Person para garantizar que el valor del campo first_name sea único dentro de los documentos que tienen el mismo valor last_name:

class Person
include Mongoid::Document
field :first_name, type: String
field :last_name, type: String
validates :first_name, uniqueness: { scope: :last_name }
end

Tip

Método asistente alternativo

El módulo Mongoid::Document proporciona métodos macro para ciertas validaciones. En lugar de usar el asistente de validación uniqueness en la sentencia de macro validates, puede usar el método validates_uniqueness_of, como se muestra en el siguiente código:

validates_uniqueness_of :first_name

Mongoid utiliza una preferencia de lectura primary cuando usas el método validates_uniqueness_of en un modelo, porque si consulta un secundario del conjunto de réplicas, podría leer datos obsoletos.

Este método toma una opción conditions que le permite especificar condiciones para agregar cuando Mongoid verifica la unicidad:

validates_uniqueness_of :name, conditions: -> { where(:age.gte => 10) }

Puedes utilizar el validates_associated asistente para validar cualquier asociación que tenga tu modelo. Cuando incluyas esta regla de validación, Mongoid validará cualquier documento de asociación cada vez que intentes guardar una instancia. Para aprender más sobre las asociaciones, consulte lo siguiente Utilice laguía de asociaciones de datos.

Este ejemplo define una regla de validación de asociación en el modelo Author para ejecutar las reglas de validación de las instancias Book incrustadas:

class Author
include Mongoid::Document
embeds_many :books
validates_associated :books
end

Importante

No se debe utilizar el asistente validates_associated en ambos extremos de sus asociaciones porque esto hace que Mongoid realice validaciones en un bucle infinito.

Se pueden utilizar los asistentes validates_each y validates_with para crear validadores personalizados. Para obtener más información sobre estos asistentes y ver ejemplos, consulte las referencias validates_each y validates_with en la documentación de Active Record.

Para aprender más sobre los validadores personalizados, consulte Realización de validaciones personalizadas en la documentación de Active Record.

Mongoid realiza la validación al persistir o guardar un documento en la base de datos. Los siguientes métodos activan las reglas de validación, por lo que Mongoid guarda el objeto en la base de datos solo si supera la validación:

  • create

  • save

  • update

Cuando utilizas la versión de dichos métodos con el sufijo !, Mongoid devuelve una excepción Mongoid::Errors::Validations si la validación falla para un objeto.

Puedes ejecutar las validaciones manualmente utilizando el método valid?. Este método devuelve true si el objeto pasa la validación, y false en caso contrario:

class Person
include Mongoid::Document
field :name, type: String
field :age, type: Integer
validates :age, comparison: { greater_than_or_equal_to: 0 }
end
# Returns true
Person.new(name: "Berta Odom", age: 4).valid?
# Returns false
Person.new(name: "Cody Peng", age: -5).valid?

Mongoid se comporta de manera diferente a Active Record al ejecutar valid? en datos persistidos. valid? de Active Record ejecuta todas las validaciones, pero valid? de Mongoid solo ejecuta validaciones en documentos que están en memoria para optimizar el rendimiento.

Para obtener más información sobre los tipos de campos que puede utilizar en los modelos de Mongoid, consulte la guía "Uso de tipos de campos BSON".

Para obtener más información sobre los métodos de validación y las macros en Mongoid, consulta la referencia del módulo Mongoid::Validatable en la documentación de la API.

Para ver una lista completa de asistentes de validaciones en Active Record, consulte la referencia ActiveModel::Validations::HelperMethods en la documentación de la API de Rails.

Volver

Documentos

En esta página