From f90459d163cfe8964f2855ac6a3b4583ab77ea9a Mon Sep 17 00:00:00 2001 From: Daniel Uber Date: Mon, 17 Jan 2022 17:12:52 -0600 Subject: [PATCH] Include badge before serializing (#16160) We are loading the badge for each included tag in the Search::TagSerializer and seeing warnings from bullet ``` Bullet::Notification::UnoptimizedQueryError: GET /search/tags?name=ta USE eager loading detected Tag => [:badge] Add to your query: .includes([:badge]) Call stack /home/travis/build/forem/forem/app/serializers/search/tag_serializer.rb:5:in `block in ' /home/travis/build/forem/forem/app/services/search/tag.rb:11:in `serialize' /home/travis/build/forem/forem/app/services/search/tag.rb:7:in `search_documents' /home/travis/build/forem/forem/app/controllers/search_controller.rb:54:in `tags' /home/travis/build/forem/forem/app/lib/middlewares/set_time_zone.rb:10:in `call' ``` Follow the advice, now when multiple tags are in the result set, having multiple badges, badges are loaded only once (at query time) and not one by one (at serialization time). --- app/services/search/tag.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/search/tag.rb b/app/services/search/tag.rb index 7d38457fd..fea614f90 100644 --- a/app/services/search/tag.rb +++ b/app/services/search/tag.rb @@ -3,7 +3,7 @@ module Search ATTRIBUTES = %i[id name hotness_score rules_html supported short_summary bg_color_hex badge_id].freeze def self.search_documents(term) - results = ::Tag.search_by_name(term).supported.reorder(hotness_score: :desc).select(*ATTRIBUTES) + results = ::Tag.search_by_name(term).supported.includes(:badge).reorder(hotness_score: :desc).select(*ATTRIBUTES) serialize(results) end