Нужно добавить тег, если на теме есть любой из 4 других тегов

Всем привет,

Недавно я провёл ребрендинг своего форума и начал использовать теги.

Я столкнулся с одной проблемой (понимаю, что это не нативная функция, но, возможно, существует простой плагин?): когда создаётся новая тема с тегом “sync1”, “sync2”, “sync3” или “sync4”, мне нужно автоматически добавлять тег “apim”. Кто-нибудь знает, как это реализовать?

К сожалению, мои навыки Ruby ограничены.
Я видел следующие материалы:

и

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

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

DiscourseEvent.on(:topic_created) do |topic|
  guardian = Guardian.new(Discourse.system_user)
  required_tag_names = ["sync1", "sync2", "sync3", "sync4"]
  DiscourseTagging.tag_topic_by_names(topic, guardian, ["apim"], append: true) if topic.tags.exists?(name: required_tag_names)
end

Вам нужен этот код :arrow_up:

Редактирование: Вы также можете обеспечить это, добавив группу тегов и установив “apim” в качестве родительского тега. В этом случае пользователи смогут выбирать теги “sync” только после выбора родительского тега “apim”.


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

Отлично! Обычно я стараюсь разобраться в таких вещах самостоятельно, но Ruby — не моя специализация, и у меня было предчувствие, что кто-то предоставит пример в течение нескольких минут :slight_smile:

Теперь мне осталось только понять, как добавить это в плагин, но я уверен, что это довольно просто.

Я согласен, что иногда выбор дочернего тега, который добавляет родительский, может быть предпочтительным результатом.

Спасибо за вашу помощь.

РЕДАКТИРОВАНИЕ: плагин создан и работает как задумано, огромное спасибо за помощь!