From 0ab3aaca72a6315a8647bbdba855ff98f2659648 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Thu, 27 Nov 2025 11:27:10 -0500 Subject: [PATCH] Preload Event to avoid N+1s on the timeline --- app/models/event.rb | 10 ++++++++++ app/models/user/day_timeline.rb | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index c759c18ee..92da7cf19 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -9,6 +9,16 @@ class Event < ApplicationRecord has_many :webhook_deliveries, class_name: "Webhook::Delivery", dependent: :delete_all scope :chronologically, -> { order created_at: :asc, id: :desc } + scope :preloaded, -> { + includes(:creator, :board, { + eventable: [ + :goldness, :closure, :image_attachment, + { rich_text_body: :embeds_attachments }, + { rich_text_description: :embeds_attachments }, + { card: [:goldness, :closure, :image_attachment] } + ] + }) + } after_create -> { eventable.event_was_created(self) } after_create_commit :dispatch_webhooks diff --git a/app/models/user/day_timeline.rb b/app/models/user/day_timeline.rb index b9ae4941a..1fe4ed36e 100644 --- a/app/models/user/day_timeline.rb +++ b/app/models/user/day_timeline.rb @@ -71,7 +71,7 @@ class User::DayTimeline def timelineable_events Event - .includes(:creator, :board, :eventable) + .preloaded .where(board: boards) .where(action: TIMELINEABLE_ACTIONS) end