تحويل جماعي للمواضيع من فئة إلى رسائل خاصة للمجموعة

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

على حد علمي، يجب أن يعمل هذا عبر وحدة التحكم:

  1. تحديد المواضيع حسب فئتها
  2. تغيير archetype الموضوع إلى private_message
  3. تغيير subtype الموضوع إلى ‘user_to_user’
  4. جعل category الموضوع Null
  5. في topic_groups (أو ربما topic_allowed_groups)، إضافة سطر بمعرف المجموعة (group_id) ومعرف الموضوع (topic_id) ذي الصلة

هل هذا النهج منطقي؟ أحتاج إلى العمل على الفرق بين جداول الموضوع/المجموعات هذه أولاً بالطبع. والقيام بذلك في بيئة اختبار للبدء!!

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

قد ينجح ذلك. أيضًا، إذا لم تكن تعرف، يمكنك فعل شيء مثل

 topics = Topic.where(category: 10)

  topics.update_all(archetype: xxx, topic_category: nil)

أو شيء من هذا القبيل. إذا كنت تعرف عن update_all، فهذا ليس خبرًا.

إعجابَين (2)

شكراً جاي! سيكون ذلك لطيفاً وسريعاً للنصف الأول. ومع ذلك، يجب علي أيضاً التأكد من أنهم سينتهون كمجموعة مديري مشاريع (Group PMs).

هل لديك أي فكرة عما يجب علي فعله مع جدولي topic_groups / topic_allowed_groups؟ لا أعتقد أنه يمكنني التخلص من الأمر باستخدام update_all لهما.

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

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

بدلاً من ذلك، يمكنك استخدام وحدة تحكم ريلز (Rails Console) (بافتراض أنك تستضيف بنفسك)، وهي أسرع وأكثر قوة بكثير.

من واجهة المستخدم

  1. قم بإزالة أعضاء المجموعة الآخرين من المجموعة (ولكن احتفظ بقائمة بأسماء المستخدمين/رسائل البريد الإلكتروني حتى تتمكن من إضافتهم مرة أخرى بسهولة). سيؤدي هذا إلى منع إرسال الإشعارات إليهم.
  2. قم بالمرور عبر كل موضوع في الفئة، وتحويل كل منها إلى رسالة خاصة (PM) باستخدام قائمة الأدوات الخاصة بالمسؤول
    • أجد أن هذا أسهل طريقة للقيام بذلك عن طريق فتح كل موضوع في علامة تبويب خاصة به، ثم الانتقال بينها واحدة تلو الأخرى
  3. أضف المجموعة إلى كل موضوع (الآن رسائل خاصة)
  4. أعد إضافة أعضاء المجموعة إلى المجموعة
  5. قم بتنظيف/حذف جميع “المنشورات الصغيرة” في كل رسالة مجموعة حسب الرغبة

في وحدة تحكم ريلز

يمكن الوصول إلى وحدة التحكم عن طريق الدخول إلى الحاوية ثم استدعاء وحدة التحكم:

./launcher enter app
  rails c

قم بتعيين الفئة والمجموعة، ثم انسخ البرنامج النصي أدناه في وحدة التحكم:

category_id = =CategoryID= 
group_name = '=GroupName='

group = Group.find_by('lower(name) = ?', group_name.downcase)
about_id = Category.find(category_id).topic_id

topic_ids = Topic.where(category_id: category_id).where.not(id: about_id).pluck(:id)

Topic.where(id: topic_ids).find_each do |topic|
  topic.archetype = Archetype.private_message
  topic.category_id = nil
  topic.subtype = 'user_to_user'
  topic.save!

  TopicAllowedGroup.find_or_create_by!(topic_id: topic.id, group_id: group.id)

  Post.where(topic_id: topic.id).pluck(:user_id).uniq.each do |uid|
    TopicAllowedUser.find_or_create_by!(topic_id: topic.id, user_id: uid)
  end
end

هذا لا يرسل إشعارًا للمستخدمين على الإطلاق، ويحافظ على المستخدمين المشاركين في المنشورات بشكل جيد (فقط في حال لم يكونوا في المجموعة)

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