class ViewModel::ActiveRecord
def eager_includes(include_referenced: true, vm_path: [])
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