Validação
O Mongoid inclui ActiveModel::Validations
para fornecer a validação básica, além de um validador associado e exclusivo adicional.
Consulte as Validações de registros ativos Guia Rails e ActiveModel::Validations documentação para obter mais informações.
O Mongoid se comporta de forma ligeiramente diferente do Active Record ao usar #valid?
em dados já persistentes. O #valid?
do Active Record executará todas as validações, enquanto o #valid?
do Mongoid só executará validações em documentos que estejam na memória como uma otimização.
validates_uniqueness_of
e :conditions
opção
A opção :conditions
para validates_uniqueness_of
pode ser usada para fornecer condições adicionais a serem adicionadas à query do banco de dados em busca de documentos idênticos. Esta opção não influencia quando a validação é executada porque não é considerada quando o Mongoid recupera o valor presente do respectivo campo do modelo. Considere o seguinte exemplo:
class Band include Mongoid::Document field :name, type: String field :year, type: Integer validates_uniqueness_of :name, conditions: -> { where(:year.gte => 2000) } end # OK Band.create!(name: "Sun Project", year: 2000) # Fails validation because there is a band with the "Sun Project" name # and year 2000 in the database, even though the model being created now # does not have a year. Band.create!(name: "Sun Project")
Read preference com validates_uniqueness_of
Para validar a exclusividade de um atributo, o Mongoid deve verificar se o valor desse atributo ainda não existe no banco de banco de dados. Se o Mongoid executar query de um membro secundário do conjunto de réplicas, existe a possibilidade de que ele esteja lendo dados obsoletos. Por esse motivo, as queries usadas para verificar uma validação validates_uniqueness_of
sempre usam a preferência de leitura primary
.