From 2ef8df3f0c1adc475ee95422e330a4ad1f48be89 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Wed, 28 May 2025 10:23:36 +0300 Subject: [PATCH] optimize query --- app/models/submission.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/models/submission.rb b/app/models/submission.rb index f448adcd..d5f17a2f 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -65,12 +65,18 @@ class Submission < ApplicationRecord scope :active, -> { where(archived_at: nil) } scope :archived, -> { where.not(archived_at: nil) } - scope :pending, -> { joins(:submitters).where(submitters: { completed_at: nil }).group(:id) } + scope :pending, lambda { + where(Submitter.where(Submitter.arel_table[:submission_id].eq(Submission.arel_table[:id]) + .and(Submitter.arel_table[:completed_at].eq(nil))).select(1).arel.exists) + } scope :completed, lambda { where.not(Submitter.where(Submitter.arel_table[:submission_id].eq(Submission.arel_table[:id]) .and(Submitter.arel_table[:completed_at].eq(nil))).select(1).arel.exists) } - scope :declined, -> { joins(:submitters).where.not(submitters: { declined_at: nil }).group(:id) } + scope :declined, lambda { + where(Submitter.where(Submitter.arel_table[:submission_id].eq(Submission.arel_table[:id]) + .and(Submitter.arel_table[:declined_at].not_eq(nil))).select(1).arel.exists) + } scope :expired, -> { pending.where(expire_at: ..Time.current) } enum :source, {