Migliore convenzione per i dati DB di plugin personalizzati per il 2021?

Sto costruendo un sito che è una community immobiliare per affitti, con la funzionalità principale incentrata su discussioni specifiche per città. Ci saranno dati utente che specificano le città di cui hanno conoscenza e qual è il loro rapporto con queste città (attualmente residente, ex residente, ecc.), e gli utenti potranno anche iscriversi alle città in cui vogliono investire ma per le quali non hanno competenze. Le città saranno tutte categorie, con un campo personalizzato per memorizzare i dati geocodificati, in modo che gli utenti possano sfogliare le città su una mappa.

Sono un po’ incerto su come strutturare tutto dal punto di vista dell’efficienza del database. Quando si visita una pagina di una città, mostrerò un feed che visualizza gli “esperti membri” di quella città. Se dovessi interrogare tutti gli utenti e scorrere i loro campi personalizzati e l’hash del campo personalizzato “città di competenza” ogni volta che rendo una pagina di categoria, mi sembra che sarebbe piuttosto lento, soprattutto man mano che aumentano il numero di utenti e città.

Se dovessi costruire questo nella mia applicazione Rails, il problema sarebbe facilmente risolto con alcune tabelle di join e relazioni has_many_through o simili. La mia domanda è: qual è l’approccio consigliato per un plugin che necessita di una tabella di join? Sembra che le migrazioni e le tabelle personalizzate siano sconsigliate e che sia generalmente meglio utilizzare campi personalizzati o PluginStore – non sono riuscito a trovare una documentazione reale su PluginStore, ma sono attualmente nel processo di approfondimento.

Ho pensato che fosse saggio chiedere l’approccio “ufficiale raccomandato da Discourse” prima di andare troppo avanti in una direzione specifica.

Grazie :slight_smile:
Zach

3 Mi Piace

Questo potrebbe essere stato vero nei primi tempi, ma oggi è esattamente il contrario. Abbiamo persino migrato i nostri plugin da campi personalizzati alle loro tabelle dedicate dove aveva senso, come nel caso del plugin dei sondaggi e del plugin dei voti.

I plugin con modelli di dati ricchi dovrebbero creare i propri modelli, tabelle, relazioni e migrazioni. È molto più manutenibile e garantisce ottime prestazioni. Basta stare attenti ai problemi N+1 :wink:

5 Mi Piace

Ah ok, fantastico. Felice di averlo chiesto allora. :wink: C’è un modo consigliato per modificare i modelli core all’interno del mio plugin?

Vorrei aggiungere alcune definizioni e relazioni personalizzate, ad esempio una hasmanythrough con le mie nuove tabelle, e non sono davvero sicuro di come farlo al meglio, se non chiamando funzioni sul mio nuovo modello dove devo passare gli ID della categoria e dell’utente, ecc.

Ho trovato questo post ma sembra che non abbia mai ricevuto una risposta.

2 Mi Piace

Ci sono alcuni esempi nel plugin Poll che ho menzionato sopra:

2 Mi Piace

Fantastico. Sono così entusiasta che questo sia possibile! Grazie.

3 Mi Piace