From 5c835d46bb1bcb1d9f871d7a6e90701ff6c4e16a Mon Sep 17 00:00:00 2001 From: Ladislav Smola Date: Tue, 28 Feb 2017 12:33:27 +0100 Subject: [PATCH] Fix ordering by VMs in NetworkManagers list Fix ordering by VMs in NetworkManagers list Fixes BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1383307 --- app/models/manageiq/providers/network_manager.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/models/manageiq/providers/network_manager.rb b/app/models/manageiq/providers/network_manager.rb index be8a53e27c2..edacb980bfc 100644 --- a/app/models/manageiq/providers/network_manager.rb +++ b/app/models/manageiq/providers/network_manager.rb @@ -25,6 +25,21 @@ class << model_name has_many :load_balancer_health_checks, :foreign_key => :ems_id, :dependent => :destroy has_many :load_balancer_health_check_members, :through => :load_balancer_health_checks + # Generates ORDER BY ((SELECT COUNT(*) FROM "vms" WHERE "ext_management_systems"."parent_ems_id" = "vms"."ems_id")) + # So unlike the parent class definition, this looks at "ext_management_systems"."parent_ems_id" instead of + # "ext_management_systems"."id" + # If we are able to define a has_many :vms, :through => :parent_manager, that does actual join, this code should + # not be needed. + virtual_total :total_vms, :vms, { + :arel => lambda do |t| + foreign_table = Vm.arel_table + local_key = :parent_ems_id + foreign_key = :ems_id + arel_column = Arel.star.count + t.grouping(foreign_table.project(arel_column).where(t[local_key].eq(foreign_table[foreign_key]))) + end + } + alias all_cloud_networks cloud_networks belongs_to :parent_manager,