إعادة تعيين إعدادات المشاهدة للفئات الافتراضية

مرحباً،

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

إعجابَين (2)

مرحباً @ufukayyildiz

هل اكتشفت كيفية المتابعة بخصوص هذه المسألة؟ أثناء قيامي بنفس الشيء واجهت بعض المشاكل أيضاً. انتهى الأمر بعدم العمل على الإطلاق ^^ راجع Members not receiving emails from Watched category (again)

3 إعجابات

لا، ليس بعد.

إعجابَين (2)

أعتقد أنه مصمم بحيث يحترم الإعداد خيارات المستخدم. لذلك، إذا أضاف المستخدم فئة يدويًا، فلن يتم الكتابة فوقها.

قد تتمكن من القيام ببعض العمل السحري من وحدة تحكم Rails، ولكن أعتقد أن نهجًا أفضل سيكون تثقيف المستخدمين لديك. ما رأيك؟ أو هل لديك موقف معين تُلزم فيه بتغيير الإعداد الافتراضي مهما حدث؟

إعجاب واحد (1)

شكراً على ردك.

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

في حالتنا، انتقلنا من تنظيم حيث يتم نشر جميع الإعلانات كموضوع جديد: كانت النتيجة كمية هائلة من المواضيع غير المناقشة (مشاركة واحدة فقط) على الصفحة الرئيسية. أرى الآن أنني بدأت في البحث في هذه الحالة في فبراير 2023 Unlist or archive a post when it has no reply per category.

نظرًا لأن هذه الإعلانات ذات صلة وتحتوي على مواعيد نهائية، لم يكن من الممكن إخفاؤها عن الصفحة الرئيسية. لذلك انتقلنا إلى تنظيم بخمسة مواضيع مخصصة (نوع الإعلان) حيث تكون كل مشاركة إعلانًا جديدًا. [1] لا يزال، نظرًا لأهمية هذه المشاركات، حاولنا تعيين الفئة على “مراقبة” للحصول على إشعارات للمستخدمين في الوقت الفعلي.

كانت هذه بداية الوضع الذي أدى حاليًا إلى عدم حصول أي شخص على أي شيء باستثناء user_mentioned و digest. كان التبديل سيكون أسهل بكثير إذا كان بإمكان المرء ببساطة إعادة تعيين جميع تفضيلات المستخدم إلى الإعدادات الافتراضية الجديدة للموقع. أو، كفكرة أخرى، نسخ تفضيلات المستخدم لتسجيل مستخدم جديد افتراضي إلى جميع المستخدمين الآخرين. [2]

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


  1. سيكون من المفيد جدًا هنا أن تكون قادرًا على تمكين “الرد على الموضوع” فقط. ↩︎

  2. يمكنني أن أتخيل أن هذا ممكن حاليًا عبر rails. ↩︎

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

من خلال الذكاء الاصطناعي الخاص بـ discourse، اقترح عليّ أمر rails التالي:

UserOption.update_all(email_digests: true, email_level: 1, email_messages_level: 1)

هل تعتقد أن هذا سيحقق ما نبحث عنه؟
شكراً!

أعتقد أن الخطوات أدناه حلت المشكلة!

في إعدادات الموقع، قمت بتعيين الفئة (31) لتكون مراقبة افتراضيًا، بأثر رجعي.
تحقق من:

CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)

معظم المستخدمين لديهم notification_level بقيمة 3 لفئتي 31. :+1:

الآن هناك شيئان يعيقان هذا التغيير من أن يكون له تأثير بنسبة 100٪:

  1. التفضيلات العامة للبريد الإلكتروني للمستخدم.
  2. تفضيلات إشعارات المستخدم لكل موضوع في الفئة (31).

:warning: الأسطر التالية ستعدل الإعدادات الشخصية لمستخدميك. لا تدخل في معركة.

أولاً، من أجل “إعادة تنشيط” رسائل البريد الإلكتروني للمستخدم، يجب تعيين email_level للمستخدمين إلى 1 (أي “عند الابتعاد”) أو 2 (“دائمًا”):

UserOption.update_all(email_level: 1)

تحقق من:

UserOption.group(:email_level).count

أحصل على شيء مثل => {1=>X} حيث X هو عدد المستخدمين.

ثانياً، notification_level للموضوع له الأولوية على notification_level للفئة (الذي تم تعديله في إعدادات الموقع). أسهل طريقة هي إزالة تفضيلات الموضوع من الطريق. للقيام بذلك، يقوم المرء ببساطة بحذف الإدخالات موضوعًا تلو الآخر:

TopicUser.where(topic_id: <nr_topic_id>).destroy_all

تحقق من:

TopicUser.where(topic_id: <nr_topic_id>).exists?

أحصل على شيء مثل => [] مما يعني أنه لا يوجد مستخدم لديه تفضيلات موضوع، وسيكون notification_level للفئة هو الافتراضي لجميع المستخدمين.


ملاحظة: بطريقة ما، لا يزال بعض المستخدمين لا يملكون تفضيلات إشعارات للفئة (31) (أي لا يوجد إدخال في جدول category_user). للتأكد من تعيين notification_level الخاص بهم، يجب إنشاء إدخال بالقيمة notification_level:

User.find_each do |user|
  unless CategoryUser.exists?(user_id: user.id, category_id: 31)
    CategoryUser.create!(user_id: user.id, category_id: 31, notification_level: 3)
  end
end

تحقق من:

CategoryUser.where(category_id: 31).pluck(:id, :notification_level)