2010-01-23 5 views
2

J'ai une configuration de système d'évaluation simple dans un modèle de blog. J'utilise une méthode personnalisée pour augmenter la note, qui est un nombre entier dans le blog db. En ce moment, je peux voter autant de fois que je veux, ce qui est bien sûr une recette pour un désastre. Les utilisateurs peuvent voter plusieurs fois et conduire le compte à rebours.Empêcher les utilisateurs de voter plusieurs fois dans Rails

Comment puis-je faire en sorte que le bouton de validation de vote disparaisse après l'avoir soumis une fois. J'ai pensé à faire un modèle séparé pour évaluer et utiliser un jeton personnalisé, mais semble inutilement compliqué pour une application simple.

Une aide?

Senthil

Répondre

1

Une façon de le faire serait d'avoir votre modèle Post et un modèle RatedPost. Le modèle RatedPost peut contenir des informations telles que incremented:boolean, decremented:boolean, changed_by:integer (user_id), post_id:integer.

Vous pouvez ensuite identifier si RatedPost.find_by_post_id_and_changed_by(post.id, user.id) renvoie des enregistrements.

Vous pouvez également identifier si les points ont été incrémentés ou décrémentés. Ainsi, vous pouvez autoriser un utilisateur à modifier son vote pendant une certaine période (disons 24 heures).

1

Vous avez besoin soit de garder une liste avec les utilisateurs qui vote sur un sujet particulier/poste ou vous devez garder une liste annexée à chaque utilisateur contenant les messages de l'utilisateur vote. Si vous stockez l'information avec les messages ou les utilisateurs est votre choix et dépend probablement des conditions de votre application.

Lors de l'affichage de la page contenant le bouton de vote, vous devez vérifier si le current_user a déjà été voté ou non. Et ne montrez pas le bouton si un vote a déjà été lancé. Pour des raisons de sécurité, vous pouvez également vérifier si un utilisateur a voté dans le code que vous avez montré ci-dessus, afin d'empêcher le vote sans utiliser le bouton.

Si vous autorisez également les personnes qui ne sont pas connectées à voter, vous devez stocker leur adresse IP ou autre.

Questions connexes