mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:42:07 +08:00
806255b3c4
introduce a couple of custom validators fix minor discrepancies in tests copy I18n error message keys to default location clean up validation invocation move some responsibilities out of validator into class
22 lines
721 B
Ruby
22 lines
721 B
Ruby
class UniqueAmongValidator < ActiveRecord::Validations::UniquenessValidator
|
|
def validate_each(record, attribute, value)
|
|
old_errors = record.errors[attribute].size
|
|
|
|
# look for any duplicates at all
|
|
super
|
|
|
|
new_errors = record.errors[attribute].size - old_errors
|
|
|
|
# do nothing further unless there were some duplicates.
|
|
unless new_errors == 0
|
|
# now look only in the collection we care about.
|
|
dupes = options[:collection].call.where("lower(#{attribute}) = ?", value.downcase)
|
|
dupes = dupes.where("id != ?", record.id) if record.persisted?
|
|
|
|
# pop off the error, if it was a false positive
|
|
record.errors[attribute].pop(new_errors) unless dupes.exists?
|
|
end
|
|
end
|
|
|
|
end
|