PERF: prevents N+1 on last_updated_by (#32817)

This commit is contained in:
Joffrey JAFFEUX
2025-05-20 17:07:37 +02:00
committed by GitHub
parent 9a7a576dc1
commit 349d7df52b
3 changed files with 9 additions and 7 deletions

View File

@ -8,7 +8,7 @@ module DiscourseAutomation
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 @@ module DiscourseAutomation
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

View File

@ -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 @@ module DiscourseAutomation
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

View File

@ -14,10 +14,7 @@ module DiscourseAutomation
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?