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