Method: Devise::Models::Authenticatable::ClassMethods#find_or_initialize_with_errors

Defined in:
lib/devise/models/authenticatable.rb

#find_or_initialize_with_errors(required_attributes, attributes, error = :invalid) ⇒ Object

Find or initialize a record with group of attributes based on a list of required attributes.



276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
# File 'lib/devise/models/authenticatable.rb', line 276

def find_or_initialize_with_errors(required_attributes, attributes, error=:invalid) #:nodoc:
  attributes = if attributes.respond_to? :permit!
    attributes.slice(*required_attributes).permit!.to_h.with_indifferent_access
  else
    attributes.with_indifferent_access.slice(*required_attributes)
  end
  attributes.delete_if { |key, value| value.blank? }

  if attributes.size == required_attributes.size
    record = find_first_by_auth_conditions(attributes)
  end

  unless record
    record = new

    required_attributes.each do |key|
      value = attributes[key]
      record.send("#{key}=", value)
      record.errors.add(key, value.present? ? error : :blank)
    end
  end

  record
end