Method: OccamsRecord::EagerLoaders::Base#initialize

Defined in:
lib/occams-record/eager_loaders/base.rb

#initialize(ref, scope = nil, use: nil, as: nil, optimizer: :select, parent: nil, active_record_fallback: nil) { ... } ⇒ Base

ActiveRecord::Relation on which you may call all the normal query hethods (select, where, etc) as well as any scopes you’ve defined on the model.

Parameters:

  • ref (ActiveRecord::Association)

    the ActiveRecord association

  • scope (Proc) (defaults to: nil)

    a scope to apply to the query (optional). It will be passed an

  • use (Array(Module)) (defaults to: nil)

    optional Module to include in the result class (single or array)

  • as (Symbol) (defaults to: nil)

    Load the association usign a different attribute name

  • optimizer (Symbol) (defaults to: :select)

    Only used for ‘through` associations. Options are :none (load all intermediate records) | :select (load all intermediate records but only SELECT the necessary columns)

  • parent (OccamsRecord::EagerLoaders::Tracer) (defaults to: nil)

    the eager loader this one is nested under (if any)

  • active_record_fallback (Symbol) (defaults to: nil)

    If passed, missing methods will be forwarded to an ActiveRecord instance. Options are :lazy (allow lazy loading in the AR record) or :strict (require strict loading)

Yields:

  • perform eager loading on this association (optional)



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/occams-record/eager_loaders/base.rb', line 29

def initialize(ref, scope = nil, use: nil, as: nil, optimizer: :select, parent: nil, active_record_fallback: nil, &builder)
  @ref, @scopes, @use, @as = ref, Array(scope), use, as
  @model = ref.klass
  @name = (as || ref.name).to_s
  @tracer = Tracer.new(name, parent)
  @eager_loaders = EagerLoaders::Context.new(@model, tracer: @tracer)
  @active_record_fallback = active_record_fallback
  @optimizer = optimizer
  if builder
    if builder.arity > 0
      builder.call(self)
    else
      instance_exec(&builder)
    end
  end
end