كيف يتفاعل `educate_until_posts` مع التغييرات الأخيرة في `check_education_message`؟

متابعة النقاش من نافذة منبثقة “شكرًا على المساهمة” تظهر في المنشورات حتى بعد تجاوز الحد؟:

لديّ سؤال حول هذا التغيير. أشعر أنني أفتقد شيئًا ما أو أنني أساءت فهم كيفية عمل هذا الأمر أثناء الاختبار.

توقّعي هو أن يظهر شريط التوعية في أول بضع منشورات، مع أن العدد يُتحكَّم به عبر إعداد الموقع educate_until_posts. وبشكل افتراضي، تكون هذه القيمة 2.

لأغراض الاختبار، غيّرتها إلى 5 فقط لتكون أكثر أمانًا. ومع ذلك، لم يرى المستخدم الاختباري رسالة التوعية سوى مرة واحدة.

كما تفحصت الكود:

كما أفهم الأمر، فإن الدالة تستبعد أولاً الرسائل الخاصة والمستخدمين الذين لديهم بالفعل سجل يشير إلى أن رسالة التوعية قد عُرضت. هذا الجزء منطقي بالنسبة لي.

ثم تحدد ما إذا كان المستخدم ينشئ موضوعًا جديدًا أو ردًا، وتُحسب إجمالي عدد منشورات/مواضيع المستخدم.

الجزء التالي هو ما يُربكني. إذا كان إجمالي عدد المنشورات أقل من الحد المكوّن، فإننا ننشئ السجل الذي يمنع عرض رسالة التوعية مرة أخرى - ثم نعرض الرسالة.

ما الذي أفتقده هنا؟

على سبيل المثال، إذا تُرك educate_until_posts على قيمته الافتراضية وهي 2، فإنني أتوقع أن تُعرض الرسالة للمستخدم في منشوريه الأولين.

يبدأ المستخدم بإنشاء منشوره الأول تمامًا. إنه ليس رسالة خاصة، ولا يوجد سجل UserHistory موجود بعد، لذا تُعرض الرسالة - وهذا منطقي.

لكن لماذا يُنشأ سجل UserHistory فورًا بعد ذلك؟ أليس هذا من شأنه منع عرض الرسالة مرة أخرى أبدًا؟

كنت أتوقع شيئًا أشبه بهذا:

  count = @user.topic_count + @user.post_count


  if count >= SiteSetting.educate_until_posts
    UserHistory.create!(
      action: UserHistory.actions[:notified_about_composer_education],
      target_user_id: @user.id,
    )
  elsif count < SiteSetting.educate_until_posts
      return (

ولكن إذا كانت هذه مشكلة فعلية، فأنا أفترض أن الاختبارات المتعلقة بهذا الإعداد كانت ستفشل. وبما أن طلب الدمج (PR) قد دُمج، فإنها لم تفشل على ما يبدو.

هل يمكن لأحد المساعدة في توضيح ما أغفله هنا؟

5 إعجابات

واو، ما هذه الحفرة العميقة! أعتقد أن الارتباك ناتج حقًا عن عدم تحديث اسم الإعداد (educate_until_posts)، لأنه، حسب علمي، في PR#400074 يبدو أن النية هي إظهار الإشعار مرة واحدة فقط، ولا مرة أخرى أبدًا، بغض النظر عن أي عدد.

لذا لم يعد الإعداد يعني الآن “إظهار الرسالة لأول N منشور”، بل أصبح:

“إظهار رسالة التثقيف فقط إذا كان عدد منشورات المستخدم أقل بالفعل من هذا الحد، وحتى في هذه الحالة، إظهارها مرة واحدة فقط.”

@Roman هل من الصحيح أن نعتقد أنه يجب علينا تحديث نص هذا الإعداد؟

إعجابَين (2)

كان الدافع الرئيسي وراء هذا التغيير هو منع ظهور رسالة التوعية بشكل متكرر. لكن بعد أن اطّلعت على هذا الموضوع، أعتقد أنني ربما مبالغة قليلاً، إذ إن ذلك يجعل الإعداد غير ذي صلة إذا ظهرت الرسالة مرة واحدة فقط.

سأراجع الأمر مرة أخرى لأرى ما إذا كان بإمكاني إيجاد حل وسط أفضل. وسأحدثكم هنا بمجرد أن أجد حلاً.

4 إعجابات

تم دمج هذا الإصلاح أمس:

بافتراض أنك أقل من عتبة educate_until_posts، ستظهر الرسالة التثقيفية مرة واحدة فقط عند بدء الكتابة ولن تظهر مرة أخرى ما لم تنشر أو تُحدّث الصفحة.

إعجابَين (2)