diff --git a/app/models/generic_object.rb b/app/models/generic_object.rb index 55dce880181..5ff22b0f852 100644 --- a/app/models/generic_object.rb +++ b/app/models/generic_object.rb @@ -18,6 +18,7 @@ class GenericObject < ApplicationRecord delegate :name, :to => :generic_object_definition, :prefix => true, :allow_nil => false virtual_column :generic_object_definition_name, :type => :string + before_destroy :remove_go_from_all_related_services def initialize(attributes = {}) # generic_object_definition will be set first since hash iteration is based on the order of key insertion @@ -200,4 +201,10 @@ def _call_automate(method_name, *args) ws = MiqAeEngine.deliver(options) ws.root['method_result'] end + + def remove_go_from_all_related_services + ServiceResource.where(:resource => self).each do |resource| + remove_from_service(resource.service) if resource.service + end + end end diff --git a/spec/models/generic_object_spec.rb b/spec/models/generic_object_spec.rb index ba660883040..d975a8d04b1 100644 --- a/spec/models/generic_object_spec.rb +++ b/spec/models/generic_object_spec.rb @@ -352,6 +352,14 @@ go.remove_from_service(service) expect(service.generic_objects).to be_blank end + + it 'removes the generic object from all related services before destroy' do + go.add_to_service(service) + expect(service.generic_objects).to include(go) + + go.destroy + expect(service.generic_objects).to be_blank + end end context "custom buttons" do