class ActiveRecord::DataIntegrity::Validation::Presence

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/presence.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/presence.rb, line 38
def find_column(attribute)
  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/presence.rb, line 22
def valid?(attribute)
  column = find_column(attribute)
  return true if column.nil?

  result = !column.null
  progress(result, 'D')
  !column && log("has nullable column #{attribute} with presence validation") unless result
  result
end
validators() click to toggle source
# File lib/active_record/data_integrity/cop/validation/presence.rb, line 32
def validators
  model
    .validators
    .select { |v| v.is_a?(ActiveRecord::Validations::PresenceValidator) }
end