لقد تمكنت من إعادة إنتاج المشكلة على موقع 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 تعمل كثيرًا وتحتاج إلى أن تكون فعالة.