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

**URL:** https://meta.discourse.org/t/bulk-convert-topics-from-a-category-to-group-pms/218811
**Category:** Support
**Tags:** rails-console
**Created:** [19 فبراير 2022، 1:32م UTC](https://meta.discourse.org/t/bulk-convert-topics-from-a-category-to-group-pms/218811 "2022-02-19T13:32:31Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [19 فبراير 2022، 1:32م UTC](https://meta.discourse.org/t/bulk-convert-topics-from-a-category-to-group-pms/218811/1 "2022-02-19T13:32:31Z")

</div>

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

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

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

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [19 فبراير 2022، 5:51م UTC](https://meta.discourse.org/t/bulk-convert-topics-from-a-category-to-group-pms/218811/2 "2022-02-19T17:51:14Z")

</div>

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

```
 topics = Topic.where(category: 10)

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

```

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

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [20 فبراير 2022، 10:22ص UTC](https://meta.discourse.org/t/bulk-convert-topics-from-a-category-to-group-pms/218811/3 "2022-02-20T10:22:22Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [22 ديسمبر 2025، 12:54م UTC](https://meta.discourse.org/t/bulk-convert-topics-from-a-category-to-group-pms/218811/4 "2025-12-22T12:54:21Z")

</div>

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

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

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

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

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

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

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

```plaintext
./launcher enter app
  rails c

```

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

```rb
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

```

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

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [21 يناير 2026، 12:54م UTC](https://meta.discourse.org/t/bulk-convert-topics-from-a-category-to-group-pms/218811/5 "2026-01-21T12:54:35Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
