module Goldiloader::AssociationLoader

Public Instance Methods

load(model, association_name) click to toggle source
# File lib/goldiloader/association_loader.rb, line 7
def load(model, association_name)
  models = model.auto_include_context.models.select do |peer|
    load?(peer, association_name)
  end

  eager_load(models, association_name)
end

Private Instance Methods

eager_load(models, association_name) click to toggle source
# File lib/goldiloader/association_loader.rb, line 17
def eager_load(models, association_name)
  if Goldiloader::Compatibility.pre_rails_7?
    ::ActiveRecord::Associations::Preloader.new.preload(models, [association_name])
  else
    ::ActiveRecord::Associations::Preloader.new(records: models, associations: [association_name]).call
  end
end
has_association?(model, association_name) click to toggle source
# File lib/goldiloader/association_loader.rb, line 32
def has_association?(model, association_name) # rubocop:disable Naming/PredicateName
  model.class.reflect_on_association(association_name).present?
end
load?(model, association_name) click to toggle source
# File lib/goldiloader/association_loader.rb, line 25
def load?(model, association_name)
  # Need to make sure the model actually has the association which won't always
  # be the case in STI hierarchies e.g. only a subclass might have the association
  has_association?(model, association_name) &&
    model.association(association_name).auto_include?
end