Domanda

Nella mia applicazione vorrei fornire una dashboard come lo schermo quando effettuano il login per avere una panoramica di ciò che sta accadendo. Ho circa 4 modelli da cui dovrei raccogliere i dati e ordinarli in ordine. Il mio problema è conoscere l'azione , quindi posso ottenere campi specifici per modello.

Ecco alcune idee su come procedere, ma penso che non siano le migliori e incomplete nella migliore delle ipotesi.

  1. Ho un modello separato che contiene l'azione: model, associated_id. " Post, 1, creato " potrebbe essere un esempio.

  2. Dispone di 4 array diversi e uniscili nell'ordine corretto dicendo created_at.

Qual è il modo migliore per farlo? Ho fornito un esempio di seguito:

alt text

È stato utile?

Soluzione

Utilizza un modello separato per memorizzare le voci del feed come suggerito nella tua prima idea. Il modello di progettazione che stai guardando si chiama modello di associazione polimorfica

Supponiamo che questo nuovo modello si chiami Feed, seguendo il modello di associazione polimorfica che useresti le colonne: feedable_type e feedable_id (come allegato al tuo modello di nomi di colonna suggerito e associate_id)

Devo ammettere che il tuo problema è più grande della semplice comprensione delle associazioni polimorfiche, i feed sono una grande innovazione del moderno design delle informazioni e comportano molte caratteristiche complesse tra cui:

  • Privacy
  • Segui / Iscriviti
  • Filtri
  • Fusione

Tutto ciò può diventare molto più complicato a seconda di uno di questi attributi. E se devi soddisfare alcuni requisiti non funzionali come il ridimensionamento e le prestazioni, il mal di testa aumenterà rapidamente.

Se hai mai creato un'applicazione di Facebook, è abbastanza illuminante vedere come funziona la loro API di pubblicazione dei feed.

Noterai rapidamente che il modello separato utilizzato per memorizzare il feed non è abbastanza attrezzato per rendere HTML le voci del feed, ma caricare il modello originale che è ben attrezzato per rendere l'HTML è costoso per il database. Per risolvere questo problema, ho il modello originale che esegue il rendering dell'HTML del feed e lo memorizzo nella tabella dei feed.

Naturalmente l'implementazione è anche un po 'più complessa di così. Come con Facebook, tutti i feed hanno 1 punto in comune (provengono da persone). Quindi ogni voce del feed ha user_id (per così dire). Poiché sappiamo che tutti i feed dispongono di questi dati e possiamo rendere " chi lo ha fatto " parte del feed di notizie, non eseguiamo il pre-rendering di quella parte.

È abbastanza utile pre-renderizzare il più possibile che sarebbe difficile ricostruire dal modello di feed in un secondo momento, ma ritardare il pre-rendering quando siamo sicuri che il componente sia onnipresente ed essere inserito nel nostro modello di feed.

/ p>

Infine, studiare progetti open source è un buon modo per imparare

Altri suggerimenti

Potresti voler controllare il plugin timeline_fu per le rotaie:

https://github.com/jamesgolick/timeline_fu

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top