Традиционная многоуровневая иерархия против плоской иерархии дискурса

В принципе, всё возможно.

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

Структура маршрутов для трёхуровневой иерархии категорий с множественными пересечениями тегов
scope "/multi" do
  constraints(tag_id: /[^\/]+?/, format: /json|rss/) do
     get '/c/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_category_show'
     get '/c/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_parent_category_category_show'
     get '/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_grandparent_category_category_show'

     Discourse.filters.each do |filter|
       get "/c/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_category_show_#{filter}"
       get "/c/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_parent_category_category_show_#{filter}"
       get "/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_grandparent_category_category_show_#{filter}"
     end
   end
end

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

С учётом этого, важно понимать два момента относительно структуры маршрутов категорий и тегов в стандартном Discourse:

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

  2. Пересечения категорий невозможны. То есть в Discourse нет маршрута для отображения тем из двух категорий одного уровня (например, двух родительских или двух дочерних категорий).

Тем не менее, вы можете реализовать четырёхуровневую систему (что, судя по всему, является вашей целью), не внося существенных изменений на стороне сервера.

Например, вы можете использовать только теги для представления четырёх уровней. Ссылка https://thepavilion.io/tags/intersection/events/bug/to-do/high представляет пересечение тегов events, bug, to-do и high на сайте Pavilion. Вы можете использовать четыре выпадающих списка, по одному для каждой группы тегов, из которой берутся эти теги, например:

[тип] [статус] [важность] [категория]

Как только вы определите, как хотите структурировать свою иерархию в рамках существующей структуры маршрутов Discourse, остальные элементы из вашего списка будут просто изменениями на стороне клиента и будут (относительно) простыми в реализации.