class ActiveRecord::DataIntegrity::Validation::Inclusion

Checks foreign key presence to the parent table of belongs_to association

Public Instance Methods

call() click to toggle source
# File lib/active_record/data_integrity/cop/validation/inclusion.rb, line 10
def call
  results = validators.map do |validator|
    validator.attributes.map do |attribute|
      valid?(attribute)
    end
  end.flatten

  results.none?(&:!)
end

Private Instance Methods

find_column(attribute) click to toggle source
# File lib/active_record/data_integrity/cop/validation/inclusion.rb, line 38
def find_column(attribute)
  return nil unless connection.table_exists?(model.table_name)

  connection
    .columns(model.table_name)
    .find { |col| col.name == attribute.to_s }
end
valid?(attribute) click to toggle source
# File lib/active_record/data_integrity/cop/validation/inclusion.rb, line 22
def valid?(attribute)
  column = find_column(attribute)
  return true if column.nil?

  result = (column.type == :enum)
  progress(result, 'D')
  !column && log("has column #{attribute} with inclusion which is not enum") unless result
  result
end
validators() click to toggle source
# File lib/active_record/data_integrity/cop/validation/inclusion.rb, line 32
def validators
  model
    .validators
    .select { |v| v.is_a?(ActiveModel::Validations::InclusionValidator) }
end