From 5722253b66108e323e7634bfc95cbd7e1321f1b8 Mon Sep 17 00:00:00 2001 From: Lodewiges Date: Mon, 19 May 2025 12:33:57 +0200 Subject: [PATCH 1/4] add 80% filter instead of more than 0 --- app/models/photo_album.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/models/photo_album.rb b/app/models/photo_album.rb index 549edf48..38df04bd 100644 --- a/app/models/photo_album.rb +++ b/app/models/photo_album.rb @@ -12,8 +12,18 @@ class PhotoAlbum < ApplicationRecord scope :publicly_visible, -> { where(publicly_visible: true) } scope :without_photo_tags, lambda { - where.not(id: Photo.joins(:tags).select(:photo_album_id).distinct) - } + qualifying_album_ids_subquery = self.unscoped + .joins(:photos) + .left_joins(photos: :tags) + .group('photo_albums.id') + .having(<<~SQL.squish) + ( + COALESCE(COUNT(DISTINCT photo_tags.photo_id), 0) * 1.0 / COUNT(DISTINCT photos.id) + ) < 0.85 + SQL + .select('photo_albums.id') + where(id: qualifying_album_ids_subquery) + } def owners if group.present? From ef9171a9c0fabe58c5c5066deafec7a5cc2801f7 Mon Sep 17 00:00:00 2001 From: Lodewiges Date: Sun, 1 Jun 2025 23:23:58 +0200 Subject: [PATCH 2/4] fixes lint --- app/models/photo_album.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/models/photo_album.rb b/app/models/photo_album.rb index 38df04bd..b55797de 100644 --- a/app/models/photo_album.rb +++ b/app/models/photo_album.rb @@ -12,18 +12,18 @@ class PhotoAlbum < ApplicationRecord scope :publicly_visible, -> { where(publicly_visible: true) } scope :without_photo_tags, lambda { - qualifying_album_ids_subquery = self.unscoped - .joins(:photos) - .left_joins(photos: :tags) - .group('photo_albums.id') - .having(<<~SQL.squish) - ( - COALESCE(COUNT(DISTINCT photo_tags.photo_id), 0) * 1.0 / COUNT(DISTINCT photos.id) - ) < 0.85 - SQL - .select('photo_albums.id') + qualifying_album_ids_subquery = unscoped + .joins(:photos) + .left_joins(photos: :tags) + .group('photo_albums.id') + .having(<<~SQL.squish) + ( + COALESCE(COUNT(DISTINCT photo_tags.photo_id), 0) * 1.0 / COUNT(DISTINCT photos.id) + ) < 0.85 + SQL + .select('photo_albums.id') where(id: qualifying_album_ids_subquery) - } + } def owners if group.present? From daf8a0af4a1cf456a0ab35faab7702514e6cf24b Mon Sep 17 00:00:00 2001 From: Lodewiges Date: Tue, 4 Nov 2025 10:40:05 +0100 Subject: [PATCH 3/4] increase readability and maintainability. --- app/models/photo_album.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/models/photo_album.rb b/app/models/photo_album.rb index b55797de..cad4b042 100644 --- a/app/models/photo_album.rb +++ b/app/models/photo_album.rb @@ -12,15 +12,18 @@ class PhotoAlbum < ApplicationRecord scope :publicly_visible, -> { where(publicly_visible: true) } scope :without_photo_tags, lambda { + tag_percentage_threshold = 0.85 qualifying_album_ids_subquery = unscoped .joins(:photos) .left_joins(photos: :tags) .group('photo_albums.id') - .having(<<~SQL.squish) - ( - COALESCE(COUNT(DISTINCT photo_tags.photo_id), 0) * 1.0 / COUNT(DISTINCT photos.id) - ) < 0.85 - SQL + .having( + <<~SQL.squish + ( + COALESCE(COUNT(DISTINCT photo_tags.photo_id), 0) * 1.0 / COUNT(DISTINCT photos.id) + ) < #{tag_percentage_threshold} + SQL + ) .select('photo_albums.id') where(id: qualifying_album_ids_subquery) } From 1bcee4a936e847dcbedec83c352a888b378bd0cd Mon Sep 17 00:00:00 2001 From: Lodewiges Date: Tue, 4 Nov 2025 10:51:53 +0100 Subject: [PATCH 4/4] fix division by 0 --- app/models/photo_album.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/photo_album.rb b/app/models/photo_album.rb index cad4b042..a8b83fc5 100644 --- a/app/models/photo_album.rb +++ b/app/models/photo_album.rb @@ -20,7 +20,7 @@ class PhotoAlbum < ApplicationRecord .having( <<~SQL.squish ( - COALESCE(COUNT(DISTINCT photo_tags.photo_id), 0) * 1.0 / COUNT(DISTINCT photos.id) + COALESCE(COUNT(DISTINCT photo_tags.photo_id), 0) * 1.0 / NULLIF(COUNT(DISTINCT photos.id), 0) ) < #{tag_percentage_threshold} SQL )