class ViewModel::ActiveRecord

def eager_includes(include_referenced: true, vm_path: [])

after two layers of eager loading.
serializing/deserializing this view. Cycles in the schema will be broken
Constructs a preload specification of the required models for
def eager_includes(include_referenced: true, vm_path: [])
  association_specs = {}
  return nil if vm_path.count(self) > 2
  child_path = vm_path + [self]
  _members.each do |assoc_name, association_data|
    next unless association_data.is_a?(AssociationData)
    next if association_data.external?
    case
    when association_data.through?
      viewmodel = association_data.direct_viewmodel
      children = viewmodel.eager_includes(include_referenced: include_referenced, vm_path: child_path)
    when !include_referenced && association_data.referenced?
      children = nil # Load up to the root viewmodel, but no further
    when association_data.polymorphic?
      children_by_klass = {}
      association_data.viewmodel_classes.each do |vm_class|
        klass = vm_class.model_class.name
        children_by_klass[klass] = vm_class.eager_includes(include_referenced: include_referenced, vm_path: child_path)
      end
      children = DeepPreloader::PolymorphicSpec.new(children_by_klass)
    else
      viewmodel = association_data.viewmodel_class
      children = viewmodel.eager_includes(include_referenced: include_referenced, vm_path: child_path)
    end
    association_specs[association_data.direct_reflection.name.to_s] = children
  end
  DeepPreloader::Spec.new(association_specs)
end