Method: FormObject::Base#validate_multiple_instance_model

Defined in:
lib/form_object/base.rb

#validate_multiple_instance_model(attribute) ⇒ Object

Note:

this method uses a special method #validate_attribute_with_message this method comes from

Note:

this method will add the model errors to your object instance and invalidate it.

Much like #validate_attributes this method will validate the attributes of a instance model using the original model the an DynamicValidation module and is not built in with ActiveRecord The model errors are using the original attribute names

Parameters:

  • symbol

    name of instance method [Symbol]

Raises:

  • (ArgumentError)


176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/form_object/base.rb', line 176

def validate_multiple_instance_model(attribute)
  raise ArgumentError, 'Attribute must be a Symbol' unless attribute.is_a?(Symbol)
  unless respond_to?(attribute)
    raise FormObject::AttributeNameError, "#{attribute.to_s} is not a valid attribute of this form object"
  end

  model_instance = attribute_lookup.dig(attribute.to_sym, :model)&.constantize&.new
  return nil if model_instance.nil?

  send(attribute).map do |hash_instance|
    hash_instance.map do |key, value|
      model_instance&.send("#{key}=", value)

      validation = validate_attribute_with_message({ "#{key}": value }, model_instance: model_instance )
      if validation.valid.eql?(false)
        validation.messages.each { |err| errors.add(attribute.to_sym, err) }
      end
      validation.valid
    end
  end.compact.all?(true)
end