Mehrfache wiederholte Zusammenfassung-Mail-Einträge

Ich konnte das Problem auf meiner lokalen Discourse-Site reproduzieren, indem ich ein Tag zur Website-Einstellung digest suppress tags hinzugefügt und dann ein Thema mit mehreren Tags erstellt habe.

Der folgende Code verursacht das Problem: 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

Bearbeiten: Ich glaube nicht, dass hier ein LEFT JOIN benötigt wird. Die Spalten aus der verknüpften topic_tags-Tabelle werden später in der Methode nicht verwendet. Die Korrektur könnte so einfach sein:

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

Ich überlasse es dem Discourse-Team, den besten Ansatz zu ermitteln. Die Methode for_digest wird oft aufgerufen und muss effizient sein.

4 „Gefällt mir“