2016-07-29 16 views
0

Ich bekomme den folgenden Fehler, wenn ich versuche, find_with_reputation oder count_with_reputation Methoden auszuführen.Schienen - ActiveRecord Reputation System Bereich Frage

ArgumentError: Evaluations of votes must have scope specified

Mein Modell ist wie folgt definiert:

class Post < ActiveRecord::Base 
    has_reputation :votes, 
      :source => :user, 
      :scopes => [:up, :down] 

Der Fehler auslöst, wenn ich versuche zum Beispiel auszuführen:

Post.find_with_reputation(:votes, :up) 

oder

Post.find_with_reputation(:votes, :up, { order: "likes" }) 

Leider ist die documentation ist nicht klar, wie man diesen Fehler umgehen kann. Darin heißt es nur, dass das Verfahren ausgeführt werden soll, wie folgt:

ActiveRecord::Base.find_with_reputation(:reputation_name, :scope, :find_options) 

Bei Modellen ohne Tive Active Reputation-System funktioniert gut mit Methoden wie:

User.find_with_reputation(:karma, :all) 

Jede Hilfe wird geschätzt.

Antwort

0

Ich habe die Lösung gefunden. Es scheint, dass ActiveRecord Reputation System die Reputations- und Gültigkeitsbereichsnamen in der Tabelle rs_reputations verbindet. In meinem Fall werden die Reputationsnamen für :votes, deren Bereiche entweder :up oder :down lauten können, :votes_up bzw. :votes_down genannt.

Daher find_with_reputation oder count_with_reputation Methoden für scoped Modelle müssen wie folgt aufgebaut werden:

Post.find_with_reputation(:votes_up, :all, { conditions: ["votes_up > ?", 0] }) 

statt:

Post.find_with_reputation(:votes, :up, { conditions: ["votes_up > ?", 0] }) 

Beachten Sie, dass Sie benötigen, um die conditions Option hinzufügen zu erhalten die gewünschten Ergebnisse, andernfalls werden alle Datensätze des Modells anstelle von denen, deren Stimmen positiv sind, zum Beispiel angezeigt.