Ich arbeite an einer Anwendung, die ein paar verschiedene Modelle (Tickets, Beiträge, Berichte, etc ..) hat. Die Daten sind in jedem Modell unterschiedlich und ich möchte einen "Feed" von all diesen Modellen erstellen, der die 10 jüngsten Einträge auf der ganzen Linie anzeigt (eine Mischung aller Daten).
Was ist der beste Weg, dies zu tun? Soll ich ein neues Feed-Modell erstellen und in diese Tabelle schreiben, wenn einem Benutzer ein Ticket zugewiesen oder ein neuer Bericht veröffentlicht wird? Wir haben STI auch untersucht, um eine Tabelle mit Modellreferenzen zu erstellen oder einfach eine Klassenmethode zu erstellen, die die Daten aggregiert. Nicht sicher, welche Methode am effizientesten ist ...
Je nach Effizienzanforderungen können Sie dies auf zwei Arten tun.
Die weniger effiziente Methode besteht darin, 10 * N-Elemente abzurufen und nach Bedarf zu sortieren und zu reduzieren:
%Vor%Eine andere Methode besteht darin, eine Indextabelle zu erstellen, die eine polymorphe Assoziation mit den verschiedenen Datensätzen besitzt. Wenn Sie nur daran interessiert sind, 10 auf einmal anzuzeigen, können Sie dies aggressiv mit einer Art von Rake-Aufgabe reduzieren, um sie auf 10 pro Benutzer oder den gewünschten Bereich zu beschränken.
Erstellen Sie ein Artikelmodell, das die Attribute "table_name" und "item_id" enthält. Erstellen Sie dann für jeden Datentyp eine partielle. Erstellen Sie nach dem Speichern, zum Beispiel einem Ticket, eine Exemplarinstanz:
%Vor%In Ihrem items_controller:
%Vor%In views / items / index.erb:
%Vor%Tags und Links ruby-on-rails single-table-inheritance