class ActiveRecord::Associations::Preloader::CountLoader
Public Instance Methods
association_key_name()
click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 5 def association_key_name reflection.foreign_key end
owner_key_name()
click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 9 def owner_key_name reflection.active_record_primary_key end
Private Instance Methods
build_scope()
click to toggle source
Calls superclass method
# File lib/active_record/precount/preloader_extension.rb, line 31 def build_scope super.tap do |scope| has_many_reflection = model.reflections[reflection.name.to_s.sub(/_count\z/, '')] if has_many_reflection.options[:as] scope.where!(klass.table_name => { has_many_reflection.type => model.base_class.sti_name }) end end end
key_conversion_required?()
click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 15 def key_conversion_required? # Are you sure this is always false? But this method is required to map result for polymorphic association. false end
load_records()
click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 41 def load_records return {} if owner_keys.empty? slices = owner_keys.each_slice(klass.connection.in_clause_length || owner_keys.size) @preloaded_records = slices.flat_map { |slice| records_for(slice) } Hash[@preloaded_records.first.map { |key, count| [key, [count]] }] end
load_slices(slices)
click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 52 def load_slices(slices) @preloaded_records = slices.flat_map { |slice| records_for(slice) } @preloaded_records.first.map { |key, count| [count, key] } end
preload(preloader)
click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 20 def preload(preloader) associated_records_by_owner(preloader).each do |owner, associated_records| owner.association(reflection.name).target = associated_records.first.to_i end end
records_for(ids)
click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 26 def records_for(ids) key = model.reflections[reflection.name.to_s.sub(/_count\z/, '')].foreign_key scope.reorder(nil).where(key => ids).group(key).count(key) end