Plusieurs entrées d'e-mails de résumé répétées

J’ai pu reproduire le problème sur mon site Discourse local en ajoutant une balise au paramètre de site digest suppress tags puis en créant un sujet avec plusieurs balises.

Le code suivant est la cause du problème : discourse/app/models/topic.rb at main · discourse/discourse · GitHub

    if SiteSetting.digest_suppress_tags.present?
      tag_ids = Tag.where_name(SiteSetting.digest_suppress_tags.split("|")).pluck(:id)
      if tag_ids.present?
        topics =
          topics.joins("LEFT JOIN topic_tags tg ON topics.id = tg.topic_id").where(
            "tg.tag_id NOT IN (?) OR tg.tag_id IS NULL",
            tag_ids,
          )
      end
    end

Edit : Je ne pense pas qu’un LEFT JOIN soit nécessaire ici. Les colonnes de la table topic_tags jointe ne semblent pas être utilisées plus tard dans la méthode. La correction pourrait être aussi simple que :

if SiteSetting.digest_suppress_tags.present?
tag_ids = Tag.where_name(SiteSetting.digest_suppress_tags.split("|")).pluck(:id)
  if tag_ids.present?
  topics =
    topics.where.not(id: TopicTag.where(tag_id: tag_ids).select(:topic_id))
  end
end

Je laisse l’équipe Discourse trouver la meilleure approche. La méthode for_digest est exécutée de nombreuses fois et doit être efficace.

4 « J'aime »