Ich erstelle eine Rails-App mit einem Benutzer- und Post-Modell, das das Act_As_Votable-Juwel implementiert.
Ich möchte, dass Benutzer Posts up- und downvoten können, aber auch Posts nach einem gewichteten_score-Algorithmus sortieren und sortieren wollen, der die Anzahl der Up- und Downvotes sowie die Zeit berücksichtigt, zu der der Post erstellt wurde.
Mein gewichteter_Score-Algorithmus wurde von Reddit übernommen und hier hier besser beschrieben.
Mein Postmodell:
%Vor%Ich möchte den Edelstein "Acts_As_Voteable" verwenden, da er Caching unterstützt, wodurch die Anzahl der Schreibvorgänge auf der Festplatte verringert und Zeit gespart werden kann. Momentan kann der Weight_Score eines Posts im laufenden Betrieb berechnet werden, wird aber nicht in der Datenbank gespeichert, was bedeutet, dass ich keine Datenbanksortierungen für Posts mit der höchsten gewichteten Punktzahl durchführen kann.
Wenn ich eine Spalte im Post-Modell erstellt hätte, müsste ich die posts-Tabelle jedes Mal aktualisieren, wenn ein Benutzer über einen Post abstimmt, was den Zweck der Verwendung des Gems Acts_As_Tagable vereitelt (da ich seine Caching-Fähigkeit nicht ausnutze) ).
Ich möchte also eine Spalte in die votes-Tabelle einfügen, um die weighted_score zu speichern (die dann jedes Mal berechnet wird, wenn über den Post abgestimmt wird), sowie eine Methode für das Votes-Modell, um diese Punktzahl zu berechnen, jedoch das gem stellt kein Modell zur Verfügung, wenn ich den Generator betreibe. Es erstellt nur eine Stimmen-Tabelle, auf die ich ohne Modell nicht zugreifen kann.
Jede Hilfe, wie ich eine solche gewichtete_Score-Spalte und -Methode zum Abstimmungsmodell hinzufügen kann oder wie man effizient die gewichtete Bewertung eines Beitrags auf eine andere Art und Weise speichert, wird geschätzt.
Sie können dies mit MYSQL out of the box mit anständigen Ergebnissen tun, verwendet mehrzeilig für einfachere Lesbarkeit.
%Vor% 450000
ist die Zahl, die optimiert wird, wodurch der Wert gegenüber der created_at stärker gewichtet wird.
Näher an Null bedeutet mehr Gewicht für die Neuheit.
45000
gibt ungefähr die Bewertung für den Tag zurück 450000
gibt ungefähr die Bewertung für die Woche zurück 4500000
gibt ungefähr die Bewertung für den Monat zurück Tags und Links ruby ruby-on-rails