Class: ActiveRecord::Associations::Preloader::Association::LoaderQuery
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | activerecord/lib/active_record/associations/preloader/association.rb |
Class Method Summary
- .new(scope, destination_key_name) ⇒ LoaderQuery constructor
Instance Attribute Summary
- #destination_key_name readonly
- #scope readonly
Instance Method Summary
Constructor Details
.new(scope, destination_key_name) ⇒ LoaderQuery
# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 13
def initialize(scope, destination_key_name) @scope = scope @destination_key_name = destination_key_name end
Instance Attribute Details
#destination_key_name (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 11
attr_reader :scope, :destination_key_name
#scope (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 11
attr_reader :scope, :destination_key_name
Instance Method Details
#eql?(other) ⇒ Boolean
# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 18
def eql?(other) destination_key_name == other.destination_key_name && scope.table_name == other.scope.table_name && scope.model.connection_specification_name == other.scope.model.connection_specification_name && scope.values_for_queries == other.scope.values_for_queries end
#hash
[ GitHub ]# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 25
def hash [destination_key_name, scope.model.table_name, scope.model.connection_specification_name, scope.values_for_queries].hash end
#load_records_for_keys(keys, &block)
[ GitHub ]# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 42
def load_records_for_keys(keys, &block) return [] if keys.empty? if destination_key_name.is_a?(Array) query_constraints = Hash.new { |hsh, key| hsh[key] = Set.new } keys.each_with_object(query_constraints) do |values_set, constraints| destination_key_name.each_with_index do |key_name, index| constraints[key_name] << values_set[index] end end scope.where(query_constraints) else scope.where(destination_key_name => keys) end.load(&block) end
#load_records_in_batch(loaders)
[ GitHub ]# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 33
def load_records_in_batch(loaders) raw_records = records_for(loaders) loaders.each do |loader| loader.load_records(raw_records) loader.run end end
#records_for(loaders)
[ GitHub ]# File 'activerecord/lib/active_record/associations/preloader/association.rb', line 29
def records_for(loaders) LoaderRecords.new(loaders, self).records end