Class: ActiveRecord::Associations::Preloader::Association::LoaderQuery
- Inherits:
-
Object
- Object
- ActiveRecord::Associations::Preloader::Association::LoaderQuery
- Defined in:
- lib/active_record/associations/preloader/association.rb
Instance Attribute Summary collapse
-
#association_key_name ⇒ Object
readonly
Returns the value of attribute association_key_name.
-
#scope ⇒ Object
readonly
Returns the value of attribute scope.
Instance Method Summary collapse
- #eql?(other) ⇒ Boolean
- #hash ⇒ Object
-
#initialize(scope, association_key_name) ⇒ LoaderQuery
constructor
A new instance of LoaderQuery.
- #load_records_for_keys(keys, &block) ⇒ Object
- #load_records_in_batch(loaders) ⇒ Object
- #records_for(loaders) ⇒ Object
Constructor Details
#initialize(scope, association_key_name) ⇒ LoaderQuery
Returns a new instance of LoaderQuery.
12 13 14 15 |
# File 'lib/active_record/associations/preloader/association.rb', line 12 def initialize(scope, association_key_name) @scope = scope @association_key_name = association_key_name end |
Instance Attribute Details
#association_key_name ⇒ Object (readonly)
Returns the value of attribute association_key_name.
10 11 12 |
# File 'lib/active_record/associations/preloader/association.rb', line 10 def association_key_name @association_key_name end |
#scope ⇒ Object (readonly)
Returns the value of attribute scope.
10 11 12 |
# File 'lib/active_record/associations/preloader/association.rb', line 10 def scope @scope end |
Instance Method Details
#eql?(other) ⇒ Boolean
17 18 19 20 21 22 |
# File 'lib/active_record/associations/preloader/association.rb', line 17 def eql?(other) association_key_name == other.association_key_name && scope.table_name == other.scope.table_name && scope.connection_specification_name == other.scope.connection_specification_name && scope.values_for_queries == other.scope.values_for_queries end |
#hash ⇒ Object
24 25 26 |
# File 'lib/active_record/associations/preloader/association.rb', line 24 def hash [association_key_name, scope.table_name, scope.connection_specification_name, scope.values_for_queries].hash end |
#load_records_for_keys(keys, &block) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/active_record/associations/preloader/association.rb', line 41 def load_records_for_keys(keys, &block) return [] if keys.empty? if association_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| association_key_name.zip(values_set).each do |key_name, value| constraints[key_name] << value end end scope.where(query_constraints) else scope.where(association_key_name => keys) end.load(&block) end |
#load_records_in_batch(loaders) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/active_record/associations/preloader/association.rb', line 32 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) ⇒ Object
28 29 30 |
# File 'lib/active_record/associations/preloader/association.rb', line 28 def records_for(loaders) LoaderRecords.new(loaders, self).records end |