class ActiveRecord::Relation

Public Class Methods

new(*args) click to toggle source
# File lib/activerecord/preload_query.rb, line 19
def initialize(*args)
  origin_initialize(*args)
  @preload_queries = []
end
Also aliased as: origin_initialize

Public Instance Methods

origin_initialize(*args)
Alias for: new
preload_query(*names) click to toggle source
# File lib/activerecord/preload_query.rb, line 24
def preload_query(*names)
  @preload_queries.push(*Array.wrap(names))
  self
end

Private Instance Methods

exec_queries() click to toggle source
# File lib/activerecord/preload_query.rb, line 32
def exec_queries
  records = origin_exec_queries

  if @preload_queries.present?
    primary_key = @klass.primary_key.try(:to_sym)
    @preload_queries.each do |pc|
      tmp = @klass.send(pc, records.map(&primary_key)).map{|x| [x.send(primary_key), x.send(pc)]}.to_h
      records.map do |record|
        record.define_singleton_method pc, lambda { tmp[record.send(primary_key)] }
      end
    end
  end

  records
end
Also aliased as: origin_exec_queries
origin_exec_queries()
Alias for: exec_queries