Class: UniquenessValidator
- Inherits:
-
ActiveRecord::Validations::UniquenessValidator
- Object
- ActiveRecord::Validations::UniquenessValidator
- UniquenessValidator
- Defined in:
- lib/uniqueness_validator.rb
Instance Method Summary collapse
Instance Method Details
#setup(klass) ⇒ Object
2 3 4 5 |
# File 'lib/uniqueness_validator.rb', line 2 def setup(klass) super @klass = [:model] if [:model] end |
#validate_each(record, attribute, value) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/uniqueness_validator.rb', line 7 def validate_each(record, attribute, value) # UniquenessValidator can't be used outside of ActiveRecord instances, here # we return the exact same error, unless the 'model' option is given. if ! [:model] && ! record.class.ancestors.include?(ActiveRecord::Base) raise ArgumentError, "Unknown validator: 'UniquenessValidator'" # If we're inside an ActiveRecord class, and `model` isn't set, use the # default behaviour of the validator. elsif ! [:model] super # Custom validator options. The validator can be called in any class, as # long as it includes `ActiveModel::Validations`. You can tell the validator # which ActiveRecord based class to check against, using the `model` # option. Also, if you are using a different attribute name, you can set the # correct one for the ActiveRecord class using the `attribute` option. else record_org, attribute_org = record, attribute attribute = [:attribute].to_sym if [:attribute] if [:model] record = [:model].new(attribute => value) else model_name = .fetch(:model_name) { record_org.class.to_s.downcase.split('::').last.gsub(/form$/, '') } record = record_org.send(model_name) end record = record_org.send([:model].to_s.downcase) super if record.errors[attribute_org].any? record_org.errors.add(attribute_org, :taken, .except(:case_sensitive, :scope).merge(value: value)) end end end |