2016-05-21 3 views
0

ich Merit gem bin mit Ruf-System zu meiner Anwendung für Benutzer hinzufügen, die angemeldet sindMerit gem - verhindern, dass Benutzer bei der Abstimmung mehr als einmal

Dies ist ein Beispiel dafür, wie ich bin mit score zu behandeln. Voting:

Das Problem ist, dass mit dieser Lösung Benutzer über die Beiträge beliebig oft abstimmen können. Ich möchte, dass die Nutzer nur eine einzige Stimme pro Post haben. Gibt es eine Möglichkeit, Benutzer daran zu hindern, mehrfach zu wählen?

Antwort

0

Sie können einen Block an score übergeben, um festzustellen, ob es zulässig ist oder nicht. Weitere Informationen finden Sie unter Merit: Defining Rules.

Dieser Code aktualisiert, was Ihnen ein Beispiel zu geben, zur Verfügung gestellt hatte, wie Sie es in Ihrer Anwendung implementieren könnte:

def initialize 
    score 5, on: 'posts#upvote', to: :user {|topic| topic.voted?(@user) } 
    score -5, on: 'posts#downvote', to: :user {|topic| topic.voted?(@user) } 
    score 1, on: 'posts#upvote', to: :itself {|topic| topic.voted?(@user) } 
    score -1, on: 'posts#downvote', to: :itself {|topic| topic.voted?(@user) } 
end 

Dies setzt voraus, dass Sie (oder bauen kann), ein Verfahren, um zu bestimmen, ob ein Benutzer schon über ein Thema abgestimmt. In diesem Fall lautet die Methode voted? zu dem Thema, für das Sie Stimmen zulassen.

Wenn Sie möchten, dass der Benutzer nur einmal abstimmen kann, aber eine vorher abgegebene Stimme umkehren soll (wie SO erlaubt), können Sie das auch im Block behandeln. Die Komplexität der im Block bewerteten Bedingung liegt ganz bei Ihnen.

+0

@Sajjad Wenn dies Ihre Frage beantwortet hat, klicken Sie bitte auf das Häkchen neben der Antwort, um es zu akzeptieren. Das Häkchen ändert die Farbe in Grün. Upvotes werden immer geschätzt. : D –

Verwandte Themen