Method: MongoModel::DocumentExtensions::Validations::UniquenessValidator#validate_each

Defined in:
lib/mongomodel/document/validations/uniqueness.rb

#validate_each(record, attribute, value) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/mongomodel/document/validations/uniqueness.rb', line 18

def validate_each(record, attribute, value)
  finder_class = find_finder_class_for(record)
  unique_scope = finder_class.scoped

  if options[:case_sensitive] || !value.is_a?(String)
    unique_scope = unique_scope.where(attribute => value)
  else
    unique_scope = unique_scope.where("_lowercase_#{attribute}" => value.downcase)
  end

  Array.wrap(options[:scope]).each do |scope|
    unique_scope = unique_scope.where(scope => record.send(scope))
  end

  unique_scope = unique_scope.where(:id.ne => record.id) unless record.new_record?

  if unique_scope.any?
    record.errors.add(attribute, :taken, :message => options[:message], :value => value)
  end
end