From 8a993fa31020ff88a4e4b28d239a9ef1069aefc9 Mon Sep 17 00:00:00 2001 From: sto Date: Tue, 10 Mar 2026 15:51:26 +0100 Subject: [PATCH] Add Bullet gem for dev & fix N+1 queries issues for core index actions --- Gemfile | 1 + Gemfile.lock | 5 +++++ app/controllers/contestants_controller.rb | 2 +- app/controllers/contests_controller.rb | 2 +- app/controllers/puzzles_controller.rb | 2 +- app/controllers/users_controller.rb | 2 +- config/environments/development.rb | 7 +++++++ 7 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 839db83..6657380 100644 --- a/Gemfile +++ b/Gemfile @@ -69,6 +69,7 @@ group :development do gem "web-console" gem "annotaterb" + gem "bullet" end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 1f62b0c..af2a5e9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,6 +91,9 @@ GEM brakeman (8.0.4) racc builder (3.3.0) + bullet (8.1.0) + activesupport (>= 3.0.0) + uniform_notifier (~> 1.11) capybara (3.40.0) addressable matrix @@ -424,6 +427,7 @@ GEM unicode-display_width (3.2.0) unicode-emoji (~> 4.1) unicode-emoji (4.2.0) + uniform_notifier (1.18.0) uri (1.1.1) useragent (0.16.11) web-console (4.3.0) @@ -455,6 +459,7 @@ DEPENDENCIES bootsnap bootstrap (~> 5.3.3) brakeman + bullet capybara csv damerau-levenshtein diff --git a/app/controllers/contestants_controller.rb b/app/controllers/contestants_controller.rb index e4d741b..c6fa194 100644 --- a/app/controllers/contestants_controller.rb +++ b/app/controllers/contestants_controller.rb @@ -12,7 +12,7 @@ class ContestantsController < ApplicationController def index authorize @contest - @contestants = @contest.contestants.sort_by { |contestant| contestant.name } + @contestants = @contest.contestants.includes([ :completions, :offline ]).sort_by { |contestant| contestant.name } filter_contestants_per_category end diff --git a/app/controllers/contests_controller.rb b/app/controllers/contests_controller.rb index f6e8567..320f74d 100644 --- a/app/controllers/contests_controller.rb +++ b/app/controllers/contests_controller.rb @@ -10,7 +10,7 @@ class ContestsController < ApplicationController def index authorize :contest - @contests = current_user.contests + @contests = current_user.contests.includes([ :contestants, puzzles: [ :image_attachment ] ]) @title = I18n.t("contests.index.title", username: current_user.username) end diff --git a/app/controllers/puzzles_controller.rb b/app/controllers/puzzles_controller.rb index b450dd2..3d2dc45 100644 --- a/app/controllers/puzzles_controller.rb +++ b/app/controllers/puzzles_controller.rb @@ -6,7 +6,7 @@ class PuzzlesController < ApplicationController authorize @contest @title = @contest.name - @puzzles = @contest.puzzles.order(:id) + @puzzles = @contest.puzzles.includes([ :image_attachment ]).order(:id) end def edit diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1a41a6d..f646ccb 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -7,7 +7,7 @@ class UsersController < ApplicationController authorize :user @title = t("users.index.title") - @users = User.all + @users = User.all.includes(contests: [ :contestants, :puzzles ]) end def edit diff --git a/config/environments/development.rb b/config/environments/development.rb index 9c140d7..6f9a259 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -71,4 +71,11 @@ Rails.application.configure do # Apply autocorrection by RuboCop to files generated by `bin/rails generate`. # config.generators.apply_rubocop_autocorrect_after_generate! + + config.after_initialize do + Bullet.enable = true + Bullet.alert = true + Bullet.console = true + Bullet.rails_logger = true + end end