הקצאת תגיות חדשות לקבוצת תגיות

מנסה למצוא דרך לתייג תגיות שנוצרו על ידי משתמשים בקטגוריה ספציפית, אשר יוקצו אוטומטית לקבוצת תגיות מוגדרת. חיפשתי ולא מצאתי משהו זמין כרגע.

האם הקוד הזה נראה כאילו הוא יעשה את מה שאני רוצה?

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 
      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 
    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 
      return unless self.category_id == target_category.id

      # קבל את חותמת הזמן של יצירת הנושא
      topic_created_at = self.created_at

      self.tags.each do |tag|
        # בדוק אם התגית נוצרה קרוב לזמן יצירת הנושא
        # אפשר חלון קטן (למשל, דקה אחת) כדי להתחשב בעיכובים בעיבוד
        if tag.created_at 
          # בדוק אם התגית כבר נמצאת בקבוצת התגיות היעד
          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

גם אני נתקלתי בדרישה דומה. האם פתרת אותה?

לא. תודיע לי אם תחשוב על משהו.