Недавно я провёл ребрендинг своего форума и начал использовать теги.
Я столкнулся с одной проблемой (понимаю, что это не нативная функция, но, возможно, существует простой плагин?): когда создаётся новая тема с тегом “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
Вам нужен этот код
Редактирование: Вы также можете обеспечить это, добавив группу тегов и установив “apim” в качестве родительского тега. В этом случае пользователи смогут выбирать теги “sync” только после выбора родительского тега “apim”.
Я думаю, что будет полезнее, если мы позволим пользователям сначала выбирать дочерние теги, а затем автоматически добавлять родительский тег Большинство обычных пользователей не знают о требованиях к родительским тегам.
Отлично! Обычно я стараюсь разобраться в таких вещах самостоятельно, но Ruby — не моя специализация, и у меня было предчувствие, что кто-то предоставит пример в течение нескольких минут
Теперь мне осталось только понять, как добавить это в плагин, но я уверен, что это довольно просто.
Я согласен, что иногда выбор дочернего тега, который добавляет родительский, может быть предпочтительным результатом.
Спасибо за вашу помощь.
РЕДАКТИРОВАНИЕ: плагин создан и работает как задумано, огромное спасибо за помощь!