多次重复的总结邮件条目

我已经在我的本地 Discourse 站点上重现了该问题,方法是在 digest suppress tags 站点设置中添加一个标签,然后创建一个带有多个标签的主题。

以下代码是导致该问题的原因: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

编辑:我认为这里不需要 LEFT JOIN。连接的 topic_tags 表中的列似乎在方法后面没有被使用。修复可能很简单:

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

我将把它留给 Discourse 团队来确定最佳方法。for_digest 方法运行了很多次,需要高效。

4 个赞