Class: OccamsRecord::EagerLoaders::PolymorphicBelongsTo

Inherits:
Object
  • Object
show all
Defined in:
lib/occams-record/eager_loaders/polymorphic_belongs_to.rb

Overview

Eager loader for polymorphic belongs tos

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ref, scope = nil, use: nil, as: nil) { ... } ⇒ PolymorphicBelongsTo

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

Yields:

  • perform eager loading on this association (optional)



16
17
18
19
20
21
# File 'lib/occams-record/eager_loaders/polymorphic_belongs_to.rb', line 16

def initialize(ref, scope = nil, use: nil, as: nil, &eval_block)
  @ref, @scope, @use, @eval_block = ref, scope, use, eval_block
  @name = (as || ref.name).to_s
  @foreign_type = @ref.foreign_type.to_sym
  @foreign_key = @ref.foreign_key.to_sym
end

Instance Attribute Details

#nameString (readonly)

Returns association name.

Returns:

  • (String)

    association name



6
7
8
# File 'lib/occams-record/eager_loaders/polymorphic_belongs_to.rb', line 6

def name
  @name
end

Instance Method Details

#run(rows, query_logger: nil) ⇒ Object

Run the query and merge the results into the given rows.

Parameters:

  • rows (Array<OccamsRecord::Results::Row>)

    Array of rows used to calculate the query.

  • query_logger (Array<String>) (defaults to: nil)


29
30
31
32
33
34
# File 'lib/occams-record/eager_loaders/polymorphic_belongs_to.rb', line 29

def run(rows, query_logger: nil)
  query(rows) { |scope|
    assoc_rows = Query.new(scope, use: @use, query_logger: query_logger, &@eval_block).run
    merge! assoc_rows, rows
  }
end