Act_As_Votable mit Reddit-Gewichtung Algorithmus in Rails

8

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.

    
steve 29.09.2013, 00:24
quelle

3 Antworten

4

acts_as_voteable fügt Methoden zu Ihrem Modell hinzu, um auf die Stimmen zuzugreifen Ссылка

%Vor%

Wenn Sie eine Spalte hinzufügen möchten, können Sie wie gewohnt eine Migration für die erstellte Tabelle ausführen. Es scheint auch, ein Abstimmungsmodell Ссылка

zu erstellen     
bridiver 27.12.2014, 02:42
quelle
1

Ich würde die Spalte gewichtete_Score zu Ihrem Post-Modell hinzufügen und die Aktualisierung über den Rückruf vornehmen. Zum Beispiel:

%Vor%     
Justin M 27.12.2014 05:30
quelle
0

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
Blair Anderson 16.12.2016 22:20
quelle

Tags und Links