# Назначить новые теги группе тегов

**URL:** https://meta.discourse.org/t/assign-new-tags-to-a-tag-group/369605
**Category:** Development
**Tags:** tags, tag-groups
**Created:** [10.Июнь.2025 19:27:09 UTC](https://meta.discourse.org/t/assign-new-tags-to-a-tag-group/369605 "2025-06-10T19:27:09Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![tknospdr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tknospdr/32/529762_2.png) [@tknospdr](https://meta.discourse.org/u/tknospdr)
#### Post date: [10.Июнь.2025 19:27:09 UTC](https://meta.discourse.org/t/assign-new-tags-to-a-tag-group/369605/1 "2025-06-10T19:27:09Z")

</div>

Пытаюсь найти способ автоматически назначать теги, созданные пользователями в определённой категории, в указанную группу тегов. Я поискал, но ничего подходящего не нашёл.

Выглядит ли этот код так, будто он сделает то, что мне нужно?

```plaintext
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

```

---

_[View the full topic](https://meta.discourse.org/t/assign-new-tags-to-a-tag-group/369605)._
