From 06cb29e4f19426603ed1226289e0e6dff371bc64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20Kom=C3=A1nek?= Date: Mon, 9 Jul 2018 16:40:50 +0200 Subject: [PATCH 1/2] Remove GO from related services before destroy. --- app/models/generic_object.rb | 7 +++++++ 1 file changed, 7 insertions(+) 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 From 9e1380ed90313eab4232afee8777894050fc2cf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20Kom=C3=A1nek?= Date: Mon, 9 Jul 2018 16:46:27 +0200 Subject: [PATCH 2/2] New spec for the before_destroy callback. --- spec/models/generic_object_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) 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