Gerarchia tradizionale a più livelli vs gerarchia discorsiva piatta

In linea di principio, tutto è possibile.

Ad esempio, in passato ho creato una gerarchia di categorie a 3 livelli che supporta anche intersezioni multiple di tag a livello di categoria.

Struttura delle rotte per gerarchia di categorie a 3 livelli con intersezioni multi-tag
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

Questa soluzione è più complessa di quanto credo tu voglia fare, ma non è sostenibile a meno che tu non sia disposto a investire molto tempo o risorse per mantenerla. È probabile che si rompa in qualche punto quando Discourse subirà aggiornamenti standard.

Con questo contesto, ci sono due cose da comprendere riguardo alla struttura delle rotte per categorie e tag in Discourse standard:

  1. Le intersezioni multi-tag sono possibili solo a livello dell’intero sito, non a livello di categoria; cioè, in Discourse standard non esistono rotte per mostrare un elenco di argomenti che appartengano a una categoria specifica e abbiano più di un tag specifico. Se volessi questa funzionalità, dovresti aggiungere la rotta.

  2. Le intersezioni tra categorie non sono possibili. Cioè, non esiste una rotta in Discourse per mostrare argomenti provenienti da due categorie allo stesso livello (ad esempio, due categorie genitore o due categorie figlie).

Puoi comunque realizzare un sistema a quattro livelli (che sembra essere il tuo obiettivo) senza apportare modifiche significative lato server.

Ad esempio, potresti utilizzare esclusivamente i tag per rappresentare i quattro livelli. https://thepavilion.io/tags/intersection/events/bug/to-do/high rappresenta l’intersezione tra i tag events, bug, to-do e high su Pavilion. Potresti avere 4 menu a tendina, uno per ciascun gruppo di tag da cui sono tratti i tag, ad esempio:

[plugin] [type] [status] [importance]

Una volta capito come strutturare la tua gerarchia all’interno della struttura delle rotte esistente di Discourse, il resto delle cose che hai elencato sono solo modifiche lato client e sono (relativamente) semplici.