class OccamsRecord::EagerLoaders::BelongsTo

Eager loader for belongs_to associations.

Private Instance Methods

merge!(assoc_rows, rows) click to toggle source

Merge the association rows into the given rows.

@param assoc_rows [Array<OccamsRecord::Results::Row>] rows loaded from the association @param rows [Array<OccamsRecord::Results::Row>] rows loaded from the main model

# File lib/occams-record/eager_loaders/belongs_to.rb, line 35
def merge!(assoc_rows, rows)
  Merge.new(rows, name).
    single!(assoc_rows, {@ref.foreign_key.to_s => @ref.association_primary_key.to_s})
end
query(rows) { |q| ... } click to toggle source

Yield one or more ActiveRecord::Relation objects to a given block.

@param rows [Array<OccamsRecord::Results::Row>] Array of rows used to calculate the query. @yield

# File lib/occams-record/eager_loaders/belongs_to.rb, line 13
def query(rows)
  return if rows.empty?

  ids = rows.map { |row|
    begin
      row.send @ref.foreign_key
    rescue NoMethodError => e
      raise MissingColumnError.new(row, e.name)
    end
  }.compact.uniq
  ids.sort! if $occams_record_test

  q = base_scope.where(@ref.association_primary_key => ids)
  yield q if ids.any?
end