Module: Reform::Form::ORM::UniquenessValidator

Included in:
ActiveRecord::UniquenessValidator
Defined in:
lib/reform/form/orm.rb

Instance Method Summary collapse

Instance Method Details

#validate(form) ⇒ Object

when calling validates it should create the Vali instance already and set @klass there! # TODO: fix this in AM.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/reform/form/orm.rb', line 11

def validate(form)
  property = attributes.first

  # here is the thing: why does AM::UniquenessValidator require a filled-out record to work properly? also, why do we need to set
  # the class? it would be way easier to pass #validate a hash of attributes and get back an errors hash.
  # the class for the finder could either be infered from the record or set in the validator instance itself in the call to ::validates.
  record = form.model_for_property(property)
  record.send("#{property}=", form.send(property))

  @klass = record.class # this is usually done in the super-sucky #setup method.
  super(record).tap do |res|
    if record.errors.present?
      error = self.class.name.include?("Mongoid") ? record.errors.first.last : :taken
      form.errors.add(property, error)
    end
  end
end