正在尝试找到一种方法,将特定类别中用户创建的标签自动分配给指定的标签组。我搜索了一下,没有找到目前可用的功能。
这段代码看起来能实现我的需求吗?
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|
# 检查标签是否在主题创建时间附近创建
# 允许一个很小的窗口(例如,1分钟)来处理延迟
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