Menu Docs
Página inicial do Docs
/ / /
Mongoid
/

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

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.

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.

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.

Nesta seção, você pode aprender sobre as seguintes regras de validação comuns e visualizar exemplos que usam auxiliares de validaçã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 de order_date

  • quantity: Deve 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

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/

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

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

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) }

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.

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.

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.

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.

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.

Voltar

Herança