From 3d21574abbac4640d6918198b91d152c1d313425 Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Tue, 20 May 2025 15:35:27 +0200 Subject: [PATCH] PERF: prevents N+1 on last_updated_by --- .../discourse_automation/admin_automations_controller.rb | 8 ++++++-- .../app/models/discourse_automation/automation.rb | 3 ++- .../discourse_automation/automation_serializer.rb | 5 +---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/plugins/automation/app/controllers/discourse_automation/admin_automations_controller.rb b/plugins/automation/app/controllers/discourse_automation/admin_automations_controller.rb index 84ee5af2ee5df..ef0c9492ffc3f 100644 --- a/plugins/automation/app/controllers/discourse_automation/admin_automations_controller.rb +++ b/plugins/automation/app/controllers/discourse_automation/admin_automations_controller.rb @@ -8,7 +8,7 @@ def index automations = DiscourseAutomation::Automation .strict_loading - .includes(:fields, :pending_automations) + .includes(:fields, :pending_automations, :last_updated_by) .order(:name) .limit(500) .all @@ -26,7 +26,11 @@ def index def show automation = - DiscourseAutomation::Automation.includes(:fields, :pending_automations).find(params[:id]) + DiscourseAutomation::Automation.includes( + :fields, + :pending_automations, + :last_updated_by, + ).find(params[:id]) render_serialized_automation(automation) end diff --git a/plugins/automation/app/models/discourse_automation/automation.rb b/plugins/automation/app/models/discourse_automation/automation.rb index cc0efd5f7ae0d..498f269cee9e2 100644 --- a/plugins/automation/app/models/discourse_automation/automation.rb +++ b/plugins/automation/app/models/discourse_automation/automation.rb @@ -4,6 +4,8 @@ module DiscourseAutomation class Automation < ActiveRecord::Base self.table_name = "discourse_automation_automations" + belongs_to :last_updated_by, class_name: "User", foreign_key: "last_updated_by_id" + has_many :fields, class_name: "DiscourseAutomation::Field", dependent: :delete_all, @@ -17,7 +19,6 @@ class Automation < ActiveRecord::Base class_name: "DiscourseAutomation::PendingPm", dependent: :delete_all, foreign_key: "automation_id" - has_many :stats, class_name: "DiscourseAutomation::Stat", dependent: :delete_all validates :script, presence: true diff --git a/plugins/automation/app/serializers/discourse_automation/automation_serializer.rb b/plugins/automation/app/serializers/discourse_automation/automation_serializer.rb index 2858ef4e99bb2..1953b66ffeed0 100644 --- a/plugins/automation/app/serializers/discourse_automation/automation_serializer.rb +++ b/plugins/automation/app/serializers/discourse_automation/automation_serializer.rb @@ -14,10 +14,7 @@ class AutomationSerializer < ApplicationSerializer attribute :stats def last_updated_by - BasicUserSerializer.new( - User.find_by(id: object.last_updated_by_id) || Discourse.system_user, - root: false, - ).as_json + BasicUserSerializer.new(object.last_updated_by || Discourse.system_user, root: false).as_json end def include_next_pending_automation_at?