أحاول إيجاد طريقة لإنشاء علامات بواسطة المستخدمين في فئة معينة ليتم تعيينها تلقائيًا إلى مجموعة علامات محددة. بحثت ولم أجد شيئًا متاحًا حاليًا.
هل يبدو هذا الكود أنه سيفعل ما أريده؟
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