class ViewModel::ActiveRecord::UpdateOperation
def build!(update_context)
def build!(update_context) raise ViewModel::DeserializationError::Internal.new('Internal error: UpdateOperation cannot build a deferred update') if viewmodel.nil? return self if built? update_data.associations.each do |association_name, association_update_data| association_data = self.viewmodel.class._association_data(association_name) update = if association_data.collection? build_updates_for_collection_association(association_data, association_update_data, update_context) else build_update_for_single_association(association_data, association_update_data, update_context) end add_update(association_data, update) end update_data.referenced_associations.each do |association_name, reference_string| association_data = self.viewmodel.class._association_data(association_name) update = if association_data.through? build_updates_for_collection_referenced_association(association_data, reference_string, update_context) elsif association_data.collection? build_updates_for_collection_association(association_data, reference_string, update_context) else build_update_for_single_association(association_data, reference_string, update_context) end add_update(association_data, update) end @built = true self end