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.
@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 –