From 0acd6bea4c396b27e59880560d7bb1a702964796 Mon Sep 17 00:00:00 2001 From: Amanda Alves Branquinho Date: Mon, 1 Jul 2024 20:55:06 -0300 Subject: [PATCH] PERF: Eager load field causing N+1 issue (#27626) * PERF: Fix N+1 issue for javascript_cache * FIX: missing upload fields should still appear in stylesheets Sass is still expected to compile successfully even without uploads. Revert a blank upload to have a blank URL * DEV: remove unneeded test comment --------- Co-authored-by: Jeff Wong --- app/models/theme.rb | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/models/theme.rb b/app/models/theme.rb index c177d47154c..7eef07af10a 100644 --- a/app/models/theme.rb +++ b/app/models/theme.rb @@ -714,17 +714,21 @@ class Theme < ActiveRecord::Base def build_theme_uploads_hash hash = {} - upload_fields.each do |field| - hash[field.name] = Discourse.store.cdn_url(field.upload.url) if field.upload&.url - end + upload_fields + .includes(:javascript_cache, :upload) + .each do |field| + hash[field.name] = Discourse.store.cdn_url(field.upload.url) if field.upload&.url + end hash end def build_local_theme_uploads_hash hash = {} - upload_fields.each do |field| - hash[field.name] = field.javascript_cache.local_url if field.javascript_cache - end + upload_fields + .includes(:javascript_cache, :upload) + .each do |field| + hash[field.name] = field.javascript_cache.local_url if field.javascript_cache + end hash end @@ -843,6 +847,8 @@ class Theme < ActiveRecord::Base if upload = field.upload url = upload_cdn_path(upload.url) contents << "$#{field.name}: unquote(\"#{url}\");" + else + contents << "$#{field.name}: unquote(\"\");" end else contents << to_scss_variable(field.name, field.value)