Docs Menu
Docs Home
/ /

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.

Mongoid incluye ActiveModel::Validations de Active Record para proporcionar funcionalidad de validación, incluyendo un validador asociado y de unicidad. Para obtener más información, consulte Validaciones de registros activosGuía de Rails y documentación de la API de Rails ActiveModel::Validations.

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.

Utilice la macro validates para crear una regla de validación, luego incluya el asistente de validación y las especificaciones requeridas 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 obtener más información sobre otras herramientas de validación útiles en la sección Validaciones comunes de esta guía.

En esta sección, puede obtener información sobre las siguientes reglas de validación comunes y ver ejemplos que utilizan ayudantes de validación:

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

El ayudante 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 al valor suministrado.

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

  • less_than:El valor debe ser menor que el valor suministrado.

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

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

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

  • delivery_date:Debe ser posterior a (mayor que) el 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 de ayuda 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/

Puede usar los ayudantes inclusion y exclusion para validar un documento según si el valor de un campo está en una lista de valores especificada. Use 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 garantizar 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

Puede utilizar los ayudantes presence y absence para validar un documento en función de si un valor de campo está presente o ausente (vacío).

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 cadena vacía:

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

Tip

Método de ayuda 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

Puede usar el asistente uniqueness para validar un documento en función de si el valor de un campo es único respecto a otros valores de la colección. Puede usar la opción scope para especificar uno o más nombres de campo que Mongoid utiliza para limitar la comprobació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 de ayuda 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 se usa el método validates_uniqueness_of en un modelo, porque si consulta a un miembro 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) }

Puede usar el asistente validates_associated para validar cualquier asociación que tenga su modelo. Al incluir esta regla de validación, Mongoid valida cualquier documento de asociación cada vez que intenta guardar una instancia. Para obtener más información sobre las asociaciones, consulte Guía de asociaciones.

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

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

Importante

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

Puede usar los validates_each validates_with ayudantes y para crear validadores personalizados. Para obtener más información sobre estos ayudantes y ver ejemplos, consulte las referencias a validates_each y validates_with en la documentación de Active Record.

Para obtener más información sobre los validadores personalizados,consulte Realizar 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 se utiliza la versión con sufijo !de los métodos anteriores, Mongoid devuelve una excepción Mongoid::Errors::Validations si falla la validación de un objeto.

Puede ejecutar validaciones manualmente con el método valid?. Este método devuelve true si el objeto supera 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 forma diferente a Active Record al ejecutar valid? en datos persistentes. El valid? de Active Record ejecuta todas las validaciones, pero el valid? de Mongoid solo las ejecuta en los documentos en memoria para optimizar el rendimiento.

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

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

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

Volver

Herencia

En esta página