أخطط لتحويل مجموعة من المواضيع إلى رسائل جماعية لتخفيض بعض الفئات غير المستخدمة تقريبًا. لا يمكننا القيام بذلك عبر واجهة المستخدم (واحدة تلو الأخرى فقط)، ولا يمكنني العثور على طريقة جماعية للقيام بذلك.
على حد علمي، يجب أن يعمل هذا عبر وحدة التحكم:
تحديد المواضيع حسب فئتها
تغيير archetype الموضوع إلى private_message
تغيير subtype الموضوع إلى ‘user_to_user’
جعل category الموضوع Null
في topic_groups (أو ربما topic_allowed_groups)، إضافة سطر بمعرف المجموعة (group_id) ومعرف الموضوع (topic_id) ذي الصلة
هل هذا النهج منطقي؟ أحتاج إلى العمل على الفرق بين جداول الموضوع/المجموعات هذه أولاً بالطبع. والقيام بذلك في بيئة اختبار للبدء!!
لقد توصلت منذ ذلك الحين (من الواضح أن الأمر استغرق بعض الوقت!) إلى طريقتين لتحقيق ذلك. يمكنك القيام بذلك عبر واجهة المستخدم (UI)، والتي تعمل بشكل جيد مع الفئات الصغيرة (والمجموعات الصغيرة). يتطلب الأمر بعض العناية لتجنب إطلاق إشعارات غير مفيدة أثناء القيام بذلك، ولكنه ممكن تمامًا.
بدلاً من ذلك، يمكنك استخدام وحدة تحكم ريلز (Rails Console) (بافتراض أنك تستضيف بنفسك)، وهي أسرع وأكثر قوة بكثير.
من واجهة المستخدم
قم بإزالة أعضاء المجموعة الآخرين من المجموعة (ولكن احتفظ بقائمة بأسماء المستخدمين/رسائل البريد الإلكتروني حتى تتمكن من إضافتهم مرة أخرى بسهولة). سيؤدي هذا إلى منع إرسال الإشعارات إليهم.
قم بالمرور عبر كل موضوع في الفئة، وتحويل كل منها إلى رسالة خاصة (PM) باستخدام قائمة الأدوات الخاصة بالمسؤول
أجد أن هذا أسهل طريقة للقيام بذلك عن طريق فتح كل موضوع في علامة تبويب خاصة به، ثم الانتقال بينها واحدة تلو الأخرى
أضف المجموعة إلى كل موضوع (الآن رسائل خاصة)
أعد إضافة أعضاء المجموعة إلى المجموعة
قم بتنظيف/حذف جميع “المنشورات الصغيرة” في كل رسالة مجموعة حسب الرغبة
في وحدة تحكم ريلز
يمكن الوصول إلى وحدة التحكم عن طريق الدخول إلى الحاوية ثم استدعاء وحدة التحكم:
./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
هذا لا يرسل إشعارًا للمستخدمين على الإطلاق، ويحافظ على المستخدمين المشاركين في المنشورات بشكل جيد (فقط في حال لم يكونوا في المجموعة)