מנסה למצוא דרך לתייג תגיות שנוצרו על ידי משתמשים בקטגוריה ספציפית, אשר יוקצו אוטומטית לקבוצת תגיות מוגדרת. חיפשתי ולא מצאתי משהו זמין כרגע.
האם הקוד הזה נראה כאילו הוא יעשה את מה שאני רוצה?
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