مدخلات عدة مكررة لملخص البريد الإلكتروني

لقد تمكنت من إعادة إنتاج المشكلة على موقع 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 إعجابات