Sha256: 32a03bd1f7fb40a2ed4231dcfab31e60fa6050f28b0628e6b9c626cd73a54e90

Contents?: true

Size: 1.91 KB

Versions: 21

Compression:

Stored size: 1.91 KB

Contents

module ActiveRecord
  module Associations
    class Preloader
      class Association
        def records_for(ids)
          records = if association_key_name.is_a?(Array)
                      predicate = cpk_in_predicate(klass.arel_table, association_key_name, ids)
                      scope.where(predicate)
                    else
                      scope.where(association_key_name => ids)
                    end
          records.load do |record|
            # Processing only the first owner
            # because the record is modified but not an owner
            owner = owners_by_key[convert_key(record[association_key_name])].first
            association = owner.association(reflection.name)
            association.set_inverse_instance(record)
          end
        end

        def owners_by_key
          @owners_by_key ||= owners.each_with_object({}) do |owner, result|
            # CPK
            # key = convert_key(owner[owner_key_name])
            key = if owner_key_name.is_a?(Array)
                    Array(owner_key_name).map do |key_name|
                      convert_key(owner[key_name])
                    end
                  else
                    convert_key(owner[owner_key_name])
                  end
            (result[key] ||= []) << owner if key
          end
        end

        def records_by_owner
          @records_by_owner ||= preloaded_records.each_with_object({}) do |record, result|
            key = if association_key_name.is_a?(Array)
                    Array(record[association_key_name]).map do |key|
                      convert_key(key)
                    end
                  else
                    convert_key(record[association_key_name])
                  end
            owners_by_key[key].each do |owner|
              (result[owner] ||= []) << record
            end
          end
        end
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
composite_primary_keys-13.0.5 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-13.0.4 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-13.0.3 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-13.0.2 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-13.0.1 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-13.0.0 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.10 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.9 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.8 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.6 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.5 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.4 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.3 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.2 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.1 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.0 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.0.rc5 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.0.rc4 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.0.rc3 lib/composite_primary_keys/associations/preloader/association.rb
composite_primary_keys-12.0.0.rc2 lib/composite_primary_keys/associations/preloader/association.rb