From 20bc34ca52311b647183a69416b8fafabe88d3e2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 22 Aug 2025 19:58:40 -0400 Subject: [PATCH] Rely on `pluck` for the SELECT in `RuleTranslation.languages` (#35826) --- app/models/rule_translation.rb | 2 +- spec/models/rule_translation_spec.rb | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/models/rule_translation.rb b/app/models/rule_translation.rb index ccf0d4ba33d..fbcf55627ca 100644 --- a/app/models/rule_translation.rb +++ b/app/models/rule_translation.rb @@ -22,6 +22,6 @@ class RuleTranslation < ApplicationRecord scope :by_language_length, -> { order(Arel.sql('LENGTH(LANGUAGE)').desc) } def self.languages - RuleTranslation.joins(:rule).merge(Rule.kept).select(:language).distinct.pluck(:language).sort + joins(:rule).merge(Rule.kept).distinct.pluck(:language).sort end end diff --git a/spec/models/rule_translation_spec.rb b/spec/models/rule_translation_spec.rb index 649bd5c0e49..1a0a7375042 100644 --- a/spec/models/rule_translation_spec.rb +++ b/spec/models/rule_translation_spec.rb @@ -52,4 +52,22 @@ RSpec.describe RuleTranslation do end end end + + describe '.languages' do + let(:discarded_rule) { Fabricate :rule, deleted_at: 5.days.ago } + let(:kept_rule) { Fabricate :rule } + + before do + Fabricate :rule_translation, rule: discarded_rule, language: 'en' + Fabricate :rule_translation, rule: kept_rule, language: 'es' + Fabricate :rule_translation, language: 'fr' + Fabricate :rule_translation, language: 'es' + end + + it 'returns ordered distinct languages connected to non-discarded rules' do + expect(described_class.languages) + .to be_an(Array) + .and eq(%w(es fr)) + end + end end