Validação do documento
Nesta página
- Visão geral
- Auxiliares de validação
- Definir uma regra de validação
- Validações comuns
- Regra de comparação
- Regra de Formatação
- Regra de inclusão ou exclusão
- Regra de presença ou ausência
- Regra de singularidade
- Validar associações
- Regras de validação personalizadas
- Comportamento
- Validação do trigger
- Informações adicionais
Visão geral
Neste guia, você pode aprender como definir regras de validação em seus modelos Mongoid. Depois de implementar a validação em seus modelos, o Mongoid impede que você execute operações de gravação que violem as regras de validação. Use a validação de documento para restringir tipos de dados e intervalos de valores de campos de documento em suas coleções.
O Mongoid inclui ActiveModel::Validations
do Active Record para fornecer funcionalidade de validação, incluindo um validador associado e exclusivo. Para saber mais, consulte o guia RailsActive Record Validations e a documentação da API ActiveModel::Validations Rails .
Observação
Comparação da validação do Mongoid e do MongoDB
A validação no Mongoid se aplica apenas ao contexto do seu aplicação e é diferente da criação de regras de validação de esquema no MongoDB. Isso significa que suas regras de validação não se aplicam a operações de gravação executadas fora do seu aplicação. Para saber mais sobre a validação de esquema MongoDB , consulte Validação de esquema no manual do servidor.
Auxiliares de validação
O Mongoid oferece suporte a auxiliares de validação do Active Record que você pode usar ao definir suas classes de modelo. Você pode usar esses ajudantes para definir regras de validação comuns em seu aplicação, como verificar a presença de um campo, comparar um valor de campo com um valor especificado ou garantir que um campo tenha um valor exclusivo.
Definir uma regra de validação
Use a macro validates
para criar uma regra de validação e, em seguida, inclua o assistente de validação e as especificações necessárias para a regra.
Dica
Cada assistente de validação aceita um ou mais nomes de campo , o que permite definir a mesma regra para vários campos.
O código abaixo demonstra como usar o assistente de validação presence
para exigir que as instâncias Person
contenham um valor para o campo name
:
class Person include Mongoid::Document field :name, type: String validates :name, presence: true end
Você pode aprender sobre outros auxiliares de validação úteis na seção Validações comuns deste guia.
Validações comuns
Nesta seção, você pode aprender sobre as seguintes regras de validação comuns e visualizar exemplos que usam auxiliares de validação:
Regra de comparação
Você pode usar o assistente comparison
para validar um documento com base no valor de um campo especificado.
O assistente comparison
oferece suporte às seguintes opções:
greater_than
: O valor deve ser maior que o valor fornecido.greater_than_or_equal_to
: O valor deve ser maior ou igual ao valor fornecido.equal_to
: O valor deve ser igual ao valor fornecido.less_than
: O valor deve ser menor que o valor fornecido.less_than_or_equal_to
: O valor deve ser menor ou igual ao valor fornecido.other_than
: O valor deve ser diferente do valor fornecido.
Este exemplo define as seguintes regras de validação de comparação no modelo Order
:
delivery_date
: deve ser posterior (maior que) ao valor deorder_date
quantity
: Deve ser menor que5
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
Regra de Formatação
Você pode usar o assistente format
para validar um documento com base no fato de um valor de campo corresponder a uma expressão regular. Use a opção with
para especificar a expressão regular.
Este exemplo define uma regra de validação de formato no modelo User
para garantir que o campo username
contenha apenas letras:
class User include Mongoid::Document field :username, type: String validates :username, format: { with: /\A[a-zA-Z]+\z/ } end
Dica
Método alternativo de ajuda
O módulo Mongoid::Document
fornece métodos macro para determinadas validações. Em vez de usar o assistente de validação format
na declaração de macro validates
, você pode usar o método validates_format_of
, conforme mostrado no código a seguir:
validates_format_of :username, with: /\A[a-zA-Z]+\z/
Regra de inclusão ou exclusão
Você pode usar os auxiliares inclusion
e exclusion
para validar um documento com base no fato de um valor de campo estar em uma lista de valores especificada. Utilize a opção in
para especificar a lista de valores.
Este exemplo define uma regra de validação de inclusão no modelo Order
para garantir que o valor de campo shipping
seja um dos valores aceitos:
class Order include Mongoid::Document field :shipping, type: String validates :shipping, inclusion: { in: %w(standard priority overnight) } end
Regra de presença ou ausência
Você pode usar os auxiliares presence
e absence
para validar um documento com base na presença ou ausência de um valor de campo (vazio).
Este exemplo define uma regra de validação de ausência no modelo Order
para garantir que o valor do campo delivery_date
seja nil
ou uma string vazia:
class Order include Mongoid::Document field :delivery_date, type: String validates :delivery_date, absence: true end
Dica
Método alternativo de ajuda
O módulo Mongoid::Document
fornece métodos macro para determinadas validações. Em vez de usar o assistente de validação presence
na declaração de macro validates
, você pode usar o método validates_presence_of
, conforme mostrado no código a seguir:
validates_presence_of :delivery_date
Regra de singularidade
Você pode usar o assistente uniqueness
para validar um documento com base no fato de um valor de campo ser exclusivo de outros valores na coleção. Você pode usar a opção scope
para especificar um ou mais nomes de campo que o Mongoid usa para limitar a verificação de exclusividade.
Este exemplo define uma regra de validação de exclusividade no modelo Person
para garantir que o valor de campo first_name
seja exclusivo em documentos que têm o mesmo valor de 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
Dica
Método alternativo de ajuda
O módulo Mongoid::Document
fornece métodos macro para determinadas validações. Em vez de usar o assistente de validação uniqueness
na declaração de macro validates
, você pode usar o método validates_uniqueness_of
, conforme mostrado no código a seguir:
validates_uniqueness_of :first_name
O Mongoid usa uma preferência de leitura primary
quando você usa o método validates_uniqueness_of
em um modelo, pois se ele consultar um membro secundário do conjunto de réplicas, poderá ler dados obsoletos.
Esse método usa uma opção conditions
que permite especificar condições a serem adicionadas quando o Mongoid verificar a exclusividade:
validates_uniqueness_of :name, conditions: -> { where(:age.gte => 10) }
Validar associações
Você pode utilizar o assistente validates_associated
para validar quaisquer associações que seu modelo tenha. Quando você inclui essa regra de validação, o Mongoid valida quaisquer documentos de associação sempre que você tentar salvar uma instância. Para saber mais sobre associações, consulte o guia Associações do.
Este exemplo define uma regra de validação de associação no modelo Author
para executar as regras de validação para as instâncias Book
incorporadas:
class Author include Mongoid::Document embeds_many :books validates_associated :books end
Importante
Não use o assistente validates_associated
em ambas as extremidades de suas associações, pois isso faz com que o Mongoid execute validações em um loop infinito.
Regras de validação personalizadas
Você pode utilizar os ajudantes do validates_each
e validates_with
para criar validadores personalizados. Para saber mais sobre esses auxiliares e ver exemplos, consulte as referências validates_each e validates_with na documentação do Active Record.
Para saber mais sobre validadores personalizados,consulte Executando validações personalizadas na documentação do Active Record.
Comportamento
O Mongoid realiza validação quando você persiste ou salva um documento no banco de dados. Os métodos a seguir acionam suas regras de validação, portanto, o Mongoid salva o objeto no banco de dados somente se ele passar pela validação:
create
save
update
Quando você usa a versão com sufixo !
dos métodos anteriores, o Mongoid retorna uma exceção Mongoid::Errors::Validations
se a validação falhar para um objeto.
Validação do trigger
Você pode executar validações manualmente utilizando o método valid?
. Esse método retorna true
se o objeto passar na validação e false
caso contrário:
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?
O Mongoid se comporta de forma diferente do Active Record ao executar valid?
em dados persistentes. O valid?
do Active Record executa todas as validações, mas o valid?
do Mongoid executa validações somente em documentos que estão na memória para otimizar o desempenho.
Informações adicionais
Para saber mais sobre os tipos de campo que você pode usar nos modelos Mongoid, consulte o guia Tipos de campo.
Para saber mais sobre métodos de validação e macros no Mongoid, consulte a referência do módulo Mongoid::Validatable na documentação da API.
Para visualizar uma lista completa de auxiliares de validações no Active Record, consulte a referência ActiveModel::Validations::HelperMethods na documentação da API do Rails.