class OccamsRecord::EagerLoaders::HasOne

Eager loader for has_one 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/has_one.rb, line 36
def merge!(assoc_rows, rows)
  Merge.new(rows, name).
    single!(assoc_rows, {@ref.active_record_primary_key.to_s => @ref.foreign_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/has_one.rb, line 13
def query(rows)
  return if rows.empty?

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

  q = base_scope.where(@ref.foreign_key => ids)
  q.where!(@ref.type => rows[0].class&.model_name) if @ref.options[:as]
  yield q if ids.any?
end