diff --git a/app/models/status.rb b/app/models/status.rb index 73f00526735..35c28d89c1f 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -115,13 +115,7 @@ class Status < ApplicationRecord scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) } scope :not_excluded_by_account, ->(account) { where.not(account_id: account.excluded_from_timeline_account_ids) } scope :not_domain_blocked_by_account, ->(account) { account.excluded_from_timeline_domains.blank? ? left_outer_joins(:account) : left_outer_joins(:account).merge(Account.not_domain_blocked_by_account(account)) } - scope :tagged_with_all, lambda { |tag_ids| - Array(tag_ids).map(&:to_i).reduce(self) do |result, id| - result.where(<<~SQL.squish, tag_id: id) - EXISTS(SELECT 1 FROM statuses_tags WHERE statuses_tags.status_id = statuses.id AND statuses_tags.tag_id = :tag_id) - SQL - end - } + scope :tagged_with_all, ->(tag_ids) { joins(:tags).where(tags: { id: tag_ids }).group(:id).having(Arel.star.count.eq tag_ids.size) } scope :tagged_with_none, lambda { |tag_ids| where('NOT EXISTS (SELECT * FROM statuses_tags forbidden WHERE forbidden.status_id = statuses.id AND forbidden.tag_id IN (?))', tag_ids) }