Class: BlockKit::Validators::AssociatedValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
lib/block_kit/validators/associated_validator.rb

Overview

Allows using Rails’ ‘validates_associated` method for ActiveModel models. The built-in validator only supports ActiveRecord models.

See: github.com/rails/rails/blob/main/activerecord/lib/active_record/validations/associated.rb

Instance Method Summary collapse

Instance Method Details

#validate_each(record, attribute, value) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/block_kit/validators/associated_validator.rb', line 10

def validate_each(record, attribute, value)
  if value.is_a?(Array)
    if value.any?(&:invalid?)
      record.errors.add(attribute, :invalid, **options, value: value, invalid_values: value.select(&:invalid?))
    end

    value.each_with_index do |item, i|
      unless item.valid?
        error_messages = build_error_messages(item.errors)
        record.errors.add("#{attribute}[#{i}]", "is invalid: #{error_messages.join(", ")}", **options, value: item)
      end
    end
  elsif value.present? && value.invalid?
    error_messages = build_error_messages(value.errors)
    record.errors.add(attribute, "is invalid: #{error_messages.join(", ")}", **options, value: value)
  end
end