class ActiveRecord::Validations::UniquenessValidator
def build_relation(klass, attribute, value)
def build_relation(klass, attribute, value) relation = klass.unscoped # TODO: Add case-sensitive / case-insensitive operators to Arel # to no longer need to checkout a connection here. comparison = klass.with_connection do |connection| relation.bind_attribute(attribute, value) do |attr, bind| return relation.none! if bind.unboundable? if !options.key?(:case_sensitive) || bind.nil? connection.default_uniqueness_comparison(attr, bind) elsif options[:case_sensitive] connection.case_sensitive_comparison(attr, bind) else # will use SQL LOWER function before comparison, unless it detects a case insensitive collation connection.case_insensitive_comparison(attr, bind) end end end relation.where!(comparison) end