class Mongoid::Validatable::AssociatedValidator

Validates whether or not an association is valid or not. Will correctly handle has one and has many associations.

@example Set up the association validations.

class Person
  include Mongoid::Document
  embeds_one :name
  embeds_many :addresses

  validates_associated :name, :addresses
end

Public Instance Methods

validate_each(document, attribute, value) click to toggle source

Validates that the associations provided are either all nil or all valid. If neither is true then the appropriate errors will be added to the parent document.

@example Validate the association.

validator.validate_each(document, :name, name)

@param [ Document ] document The document to validate. @param [ Symbol ] attribute The association to validate. @param [ Object ] value The value of the association.

@since 2.0.0

# File lib/mongoid/validatable/associated.rb, line 33
def validate_each(document, attribute, value)
  begin
    document.begin_validate
    valid = Array.wrap(value).collect do |doc|
      if doc.nil? || doc.flagged_for_destroy?
        true
      else
        doc.validated? ? true : doc.valid?
      end
    end.all?
  ensure
    document.exit_validate
  end
  document.errors.add(attribute, :invalid, **options) unless valid
end