From cf9b07711a70cd9cbef9ca55d026953bdd617f1a Mon Sep 17 00:00:00 2001 From: Jose Farias Date: Mon, 28 Oct 2024 10:27:50 -0600 Subject: [PATCH] Document `left_joins_messageable` smell --- app/models/bubble.rb | 3 +-- app/models/message.rb | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/bubble.rb b/app/models/bubble.rb index 7520de740..76e225fb4 100644 --- a/app/models/bubble.rb +++ b/app/models/bubble.rb @@ -11,14 +11,13 @@ class Bubble < ApplicationRecord scope :reverse_chronologically, -> { order created_at: :desc, id: :desc } scope :chronologically, -> { order created_at: :asc, id: :asc } + # FIXME: Compute activity and comment count at write time so it's easier to query for. scope :left_joins_comments, -> do left_joins(:messages).merge(Message.left_joins_messageable(:comments)) end - scope :ordered_by_activity, -> do left_joins_comments.select("bubbles.*, COUNT(comments.id) + bubbles.boost_count AS activity").group(:id).order("activity DESC") end - scope :ordered_by_comments, -> do left_joins_comments.select("bubbles.*, COUNT(comments.id) AS comment_count").group(:id).order("comment_count DESC") end diff --git a/app/models/message.rb b/app/models/message.rb index 0e71d3574..ed7a0b823 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -5,6 +5,7 @@ class Message < ApplicationRecord scope :chronologically, -> { order created_at: :asc, id: :desc } + # FIXME: Will be made redundant when we compute activity and comment count at write time. See commit. scope :left_joins_messageable, ->(messageable_type) do joins "LEFT OUTER JOIN #{messageable_type} ON messages.messageable_id = #{messageable_type}.id" end