Frage

In meiner Anwendung würde Ich mag ein Armaturenbrett wie Bildschirm zur Verfügung zu stellen, wenn sie anmelden, einen Überblick zu bekommen, was geschieht. Ich habe über 4 Modelle, die ich brauchen würde, von Daten zu sammeln und sie in Reihenfolge sortieren. Mein Problem ist, zu wissen die Aktion, so kann ich bestimmte Felder pro Modell bekommen.

Hier sind ein paar Ideen, wie man das macht, aber ich glaube, sie sind nicht die beste und unvollständig am besten.

  1. Ich habe ein separates Modell, das enthält: Modell, associated_id, Aktion. "Post, 1, erstellt" könnte ein Beispiel sein.

  2. Haben 4 verschiedene Arrays und kombiniere sie mit der richtigen Reihenfolge durch sagen created_at.

Was ist der beste Weg, um dies zu realisieren? Ich habe ein Beispiel unten angegeben:

alt text

War es hilfreich?

Lösung

Verwenden Sie ein separates Modell, um die Feed-Einträge zu speichern, wie Sie in Ihrer ersten Idee vorschlagen. Das Design-Muster in Ihrem suchen heißt polymorphe Assoziation Muster

Nehmen wir an, dieses neue Modell-Feed genannt wird, im Anschluss an die polymorphe Muster? Assoziation Sie die Spalten verwenden würden: feedable_type und feedable_id (im Gegensatz zu Ihrer vorgeschlagenen Spaltennamen Modell und associated_id apposed)

Ich muss zugeben, dass Ihr Problem größer ist als das einfache Verständnis der polymorphen Assoziationen ist, RSS-Feeds eine wichtige Neuerung der modernen Informationsdesign und viele komplexe Funktionen mit sich bringen, einschließlich:

  • Datenschutz
  • Folgen / Abonnieren
  • Filter
  • Merging

All dies kann sich intensiv komplizierter, je nach jedem dieses Attribute. Und wenn Sie die Kopfschmerzen, einige nicht-funktionale Anforderungen wie Skalierung und Leistung zu erfüllen haben wird schnell Verbindung.

Wenn Sie jemals eine Facebook-Anwendung aufgebaut haben, ist es durchaus aufschlussreich ist, wie funktioniert ihre Feed-Publishing-API zu sehen.

Sie werden schnell feststellen, dass das separate Modell das Futter speichern verwendete ganz unbestückt ist die Feed-Einträge HTML zu machen, aber das ursprüngliche Modell laden, die gut ausgestattet ist, die HTML zu rendern sind Datenbank teuer. Um dieses Problem zu lösen, habe ich das ursprüngliche Modell der Feed-HTML machen und ich speichere diese in den Speisetisch.

Natürlich ist die Umsetzung noch ein wenig komplexer als das. Wie bei Facebook, alle Feeds haben 1 Punkt gemeinsam (Sie kommen von Menschen). So hat jeder Feed-Eintrag hat user_id (sozusagen). Da wissen wir alle Feeds diese Daten haben und machen kann „die hat es“ Teil der News-Feed, wissen wir nicht, dass ein Teil vorrendern.

Es ist sehr hilfreich, um so viel wie möglich vorrendern, die schwierig sein würden, von dem Fördermodell neu zu bauen später, aber Verzögerung Vorrendern, wenn wir sicher sind, dass Komponente allgegenwärtig ist und in unser Feed-Modell verstaut werden.

Schließlich Open-Source-Projekte zu studieren ist eine gute Möglichkeit zu lernen

Andere Tipps

Sie können die timeline_fu Plugin für Schienen prüfen wollen:

https://github.com/jamesgolick/timeline_fu

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top