تعيين علامات جديدة لمجموعة علامات

أحاول إيجاد طريقة لإنشاء علامات بواسطة المستخدمين في فئة معينة ليتم تعيينها تلقائيًا إلى مجموعة علامات محددة. بحثت ولم أجد شيئًا متاحًا حاليًا.

هل يبدو هذا الكود أنه سيفعل ما أريده؟

enabled_site_setting :auto_tag_to_group_enabled

# إعدادات المكون الإضافي
register_site_setting :auto_tag_to_group_enabled, default: true
register_site_setting :auto_tag_category_name, default: "RestrictedCategory"
register_site_setting :auto_tag_group_name, default: "RestrictedTags"

after_initialize do
  module ::DiscourseAutoTagToGroup
    class Engine < ::Rails::Engine
      engine_name "discourse_auto_tag_to_group"
      isolate_namespace DiscourseAutoTagToGroup
    end
  end

  require_dependency "topic"
  class ::Topic
    after_save :auto_assign_new_tags_to_group, if: :auto_tag_to_group_conditions_met?

    private

    def auto_tag_to_group_conditions_met?
      # التحقق مما إذا كان المكون الإضافي ممكّنًا والموضوع يحتوي على علامات
      SiteSetting.auto_tag_to_group_enabled && self.tags.present?
    end

    def auto_assign_new_tags_to_group
      # الحصول على أسماء الفئة ومجموعة العلامات المكونة
      target_category_name = SiteSetting.auto_tag_category_name
      target_tag_group_name = SiteSetting.auto_tag_group_name

      # البحث عن الفئة ومجموعة العلامات
      target_category = Category.find_by(name: target_category_name)
      target_tag_group = TagGroup.find_by(name: target_tag_group_name)

      # الخروج إذا لم يتم العثور على الفئة أو مجموعة العلامات
      return unless target_category && target_tag_group
      return unless self.category_id == target_category.id

      # الحصول على الطابع الزمني لإنشاء الموضوع
      topic_created_at = self.created_at

      self.tags.each do |tag|
        # التحقق مما إذا كانت العلامة قد تم إنشاؤها بالقرب من وقت إنشاء الموضوع
        # السماح بنافذة صغيرة (على سبيل المثال، دقيقة واحدة) لحساب تأخيرات المعالجة
        if tag.created_at && tag.created_at >= (topic_created_at - 1.minute)
          # التحقق مما إذا كانت العلامة موجودة بالفعل في مجموعة العلامات المستهدفة
          unless TagGroupMembership.exists?(tag_id: tag.id, tag_group_id: target_tag_group.id)
            # إضافة العلامة إلى مجموعة العلامات
            TagGroupMembership.create!(tag_id: tag.id, tag_group_id: target_tag_group.id)
          end
        end
      end
    end
  end
end

لقد واجهت متطلبًا مشابهًا أيضًا. هل قمت بحلها؟

لا. أعلمني إذا توصلت إلى شيء.