# أدوات المسؤول/مفتاح ربط على منشورات الإجراءات الصغيرة

**URL:** <https://meta.discourse.org/t/admin-tools-wrench-on-small-action-posts/375531>\
**Category:** Feature\
**Created:** [24 يوليو 2025، 12:59ص UTC](https://meta.discourse.org/t/admin-tools-wrench-on-small-action-posts/375531 "2025-07-24T00:59:31Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![Saen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/saen/32/549498_2.png) [@Saen](https://meta.discourse.org/u/Saen)\
**Post date:** [15 يناير 2026، 8:36ص UTC](https://meta.discourse.org/t/admin-tools-wrench-on-small-action-posts/375531/4 "2026-01-15T08:36:05Z")

</div>

لقد تذكرت هذا المنشور من فترة. في حال استفاد أي شخص آخر من هذا في المستقبل، كان هذا هو الحل الذي توصلت إليه لهذه المشكلة في النهاية!

* * *

## إزالة منشورات الإجراءات الصغيرة غير المرغوب فيها

السكريبت الخاص بـ Rails أدناه مطلوب للقيام بذلك - لقد قمت بتسميته `smalldelete.rb` ووضعته في `/var/www/discourse/script` أثناء التواجد داخل الحاوية.

نحتاج أيضًا إلى المرور والتأكد من وضع كلمة `delete` في قسم المنشور الفعلي لكل منشور إجراء صغير نريد تدميره، للتمييز بين ما قد نرغب في الاحتفاظ به. إليك مثال لما أعنيه مع منشور **التحديث التلقائي (Auto Bump)**:

 ![Screenshot_20260115_082615_Chrome](https://global.discourse-cdn.com/meta/original/4X/c/7/d/c7de6d55e4db85483c4ace1cfbbfe1403f0c8990.jpeg)

يمكنك تغيير كلمة المفتاح هذه إلى شيء آخر إذا لزم الأمر عن طريق تعديل السطر `p.raw.strip.downcase == \"delete\"` إلى كلمة مفتاح أخرى.

### سكريبت لـ `smalldelete.rb`

* * *

```ruby
class TopicCleaner
  def self.delete_small_actions(topic_id, dry_run: false)
    topic = Topic.find_by(id: topic_id)
    unless topic
      puts "Topic #{topic_id} not found"
      return
    end

    posts = topic.posts.where(post_type: Post.types[:small_action])
    to_delete = posts.select { |p| p.raw.strip.downcase == "delete" }

    if to_delete.empty?
      puts "No small action posts with 'delete' found in topic #{topic_id}"
      return
    end

    puts "Found #{to_delete.size} matching posts in topic ##{topic_id}"

    to_delete.each do |post|
      if dry_run
        puts "Would PERMANENTLY delete post ##{post.id} (created #{post.created_at}, by #{post.user.username})"
      else
        post.destroy()
        puts "🗑️ Permanently deleted post ##{post.id}"
      end
    end

    puts dry_run ? "Dry run complete — no posts deleted." : "Finished permanent cleanup of topic #{topic_id}"
  end
end

```

**يجد السكريبت موضوعًا حسب المعرّف (ID)، ثم يتحقق من كل منشور في هذا الموضوع لمعرفة ما إذا كان يحتوي على الكلمة المفتاحية المحددة، ولا شيء آخر. إذا كان هذا صحيحًا، فإنه يقوم بتهيئة هذا المنشور المحدد للحذف.**

* * *

بمجرد إعداد السكريبت، يمكننا الدخول إلى وحدة تحكم rails وتحميله:

```ruby
load Rails.root.join("script/smalldelete.rb")

```

ثم، أخيرًا، يمكننا تشغيل

```ruby
TopicCleaner.delete_small_actions(topic_id, dry_run: false)

```

تم تضمين علامة **dry\_run** أيضًا لسرد ما سيتم حذفه نهائيًا بالضبط، إذا رغبت في ذلك.

* * *

الآن بالطبع، هذه التغييرات جمالية بحتة ولا تحدث فرقًا من حيث المحتوى، حيث أن المنشورات المحذوفة مؤقتًا لن تظهر لغير الموظفين على أي حال.

أنا معجب بشكل خاص بجعل كل شيء يبدو جميلاً ومرتبًا، لذلك يمكنني بالتأكيد رؤية بعض الحالات التي قد يرغب فيها مالكو المنتديات المعينون في الاستفادة من هذا!

---

_[View the full topic](https://meta.discourse.org/t/admin-tools-wrench-on-small-action-posts/375531)._
