Ich habe bereits bemerkt, dass es in letzter Zeit einige Änderungen gab, darunter ein schwerwiegender Fehler:
Die korrekten Mengen sind offensichtlich noch verfügbar, also gab es wahrscheinlich etwas, das während der Migration der Daten in die neuen Tabellen passiert ist?
In Discourse gibt es einige Unstimmigkeiten bei der Zählung von Lösungen, bei denen wir bereits gelöschte Themen und Beiträge mitgezählt haben.
Vor der Migration haben wir angegeben:
John hat 27 Lösungen, weil seine Beiträge 27 Mal als Lösung markiert wurden.
Dies wird in der Tabelle „UserActions“ gespeichert.
Nach der Migration zählen wir nun:
John hat 20 Lösungen, weil es 20 Themen gibt, bei denen seine Beiträge Lösungen sind.
Dies wird in der Tabelle „SolvedTopics“ gespeichert und hat eine direkte Verknüpfung zu einem vorhandenen, nicht gelöschten Thema.
Hier gibt es einen feinen Unterschied: Im ersten Szenario gab es keine Validierungen, ob der Lösungsbeitrag oder sein Thema noch existieren.
Ich werde mich mit unserem Team abstimmen, welche Zahl besser angezeigt werden soll. Persönlich neige ich dazu, Lösungen für Themen zu zählen, die noch existieren.
Ich bin ziemlich sicher, dass dies nicht das Problem sein kann – da dies in einigen Fällen nur zu weniger Zahlen und nicht zu mehr führen würde, oder? Hier ist ein weiteres Beispiel für Sie:
-> Falsch: Profile - SGS - Garuda Linux Forum
-> Richtig:
Es scheint mir unmöglich, dass dieser Zählmechanismus die Anzahl der gelösten Beiträge mehr als verdoppeln würde. Außerdem (natürlich unbestätigt) bezweifle ich stark, dass die Anzahl der gelöschten Beiträge in meinem vorherigen Beispiel so hoch war.
Ich glaube, ich habe gerade den Fehler gefunden (obwohl die Aussage über die Diskrepanz, die ich oben erwähnt habe, immer noch zutrifft) –
In der vorherigen Implementierung wird die Anzahl der Lösungen in Johns Zusammenfassung anhand der Anzahl der Male gezählt, die jemand Johns Beitrag als Lösung markiert hat.
def solved_count
UserAction.where(user: @user).where(action_type: UserAction::SOLVED).count
end
In der neuen Implementierung ist die Anzahl der Lösungen in Johns Benutzersusammenfassung die Anzahl der Male, die John einen Beitrag als Lösung markiert hat.
def solved_count
DiscourseSolved::SolvedTopic.where(accepter: @user).count
end
Dies erklärt den großen Unterschied. Die Definition von “gelöste Anzahl” hat sich von “wie oft du geantwortet hast” zu “wie oft du akzeptiert hast” geändert.
Ich werde den Fehler beheben, danke nochmals für den Bericht!
Ich werde auch die unterschiedlichen Zählmethoden im Profil-Popup und in der Benutzersusammenfassung aktualisieren.
Props an @ondrej, dass er mir auch Solution badge not working? erwähnt hat. Es scheint, dass es schon vor dieser Migration einige Unstimmigkeiten gab. Gut ist, dass wir zu einer konsistenteren Zahl über Discourse und unsere Plugins hin migrieren werden.