module ArLazyPreload::Merger

ActiveRecord::Relation::Merger patch implementing merge functionality for lazy preloadable relations

Public Instance Methods

merge() click to toggle source

Enhanced merge implements merging lazy_preload_values

Calls superclass method
# File lib/ar_lazy_preload/active_record/merger.rb, line 8
def merge
  result = super

  if other.lazy_preload_values.any?
    if other.klass == relation.klass
      merge_lazy_preloads
    else
      reflect_and_merge_lazy_preloads
    end
  end

  result
end

Private Instance Methods

merge_lazy_preloads() click to toggle source
# File lib/ar_lazy_preload/active_record/merger.rb, line 24
def merge_lazy_preloads
  relation.lazy_preload!(*other.lazy_preload_values)
end
reflect_and_merge_lazy_preloads() click to toggle source
# File lib/ar_lazy_preload/active_record/merger.rb, line 28
def reflect_and_merge_lazy_preloads
  reflection = relation.klass.reflect_on_all_associations.find do |r|
    r.class_name == other.klass.name
  end
  return unless reflection

  relation.lazy_preload!(reflection.name => other.lazy_preload_values)
end