class ActiveRecord::Associations::Preloader::Association::LoaderRecords
def already_loaded_records
def already_loaded_records already_loaded_records_by_key.values.flatten end
def initialize(loaders, loader_query)
def initialize(loaders, loader_query) @loader_query = loader_query @loaders = loaders @keys_to_load = Set.new @already_loaded_records_by_key = {} populate_keys_to_load_and_already_loaded_records end
def load_records
def load_records loader_query.load_records_for_keys(keys_to_load) do |record| loaders.each { |l| l.set_inverse(record) } end end
def populate_keys_to_load_and_already_loaded_records
def populate_keys_to_load_and_already_loaded_records loaders.each do |loader| loader.owners_by_key.each do |key, owners| if loaded_owner = owners.find { |owner| loader.loaded?(owner) } already_loaded_records_by_key[key] = loader.target_for(loaded_owner) else keys_to_load << key end end end @keys_to_load.subtract(already_loaded_records_by_key.keys) end
def records
def records load_records + already_loaded_records end