module ViewModel::ActiveRecord::AssociationManipulation
def load_associated(association_name, scope: nil, eager_include: true, serialize_context: self.class.new_serialize_context)
def load_associated(association_name, scope: nil, eager_include: true, serialize_context: self.class.new_serialize_context) association_data = self.class._association_data(association_name) direct_reflection = association_data.direct_reflection association = self.model.association(direct_reflection.name) association_scope = association.scope if association_data.through? raise ArgumentError.new('Polymorphic through relationships not supported yet') if association_data.polymorphic? associated_viewmodel = association_data.viewmodel_class direct_viewmodel = association_data.direct_viewmodel else raise ArgumentError.new('Polymorphic STI relationships not supported yet') if association_data.polymorphic? associated_viewmodel = association.klass.try { |k| association_data.viewmodel_class_for_model!(k) } direct_viewmodel = associated_viewmodel end if association_data.ordered? association_scope = association_scope.order(direct_viewmodel._list_attribute_name) end if association_data.through? association_scope = associated_viewmodel.model_class .joins(association_data.indirect_reflection.inverse_of.name) .merge(association_scope) end association_scope = association_scope.merge(scope) if scope vms = association_scope.map { |model| associated_viewmodel.new(model) } ViewModel.preload_for_serialization(vms) if eager_include if association_data.collection? vms else if vms.size > 1 raise ViewModel::DeserializationError::Internal.new("Internal error: encountered multiple records for single association #{association_name}", self.blame_reference) end vms.first end end