Acts_As_Votable est une gemme rubis spécialement écrite pour les modèles Rails/ActiveRecord et cette gemme permet à n'importe quel modèle d'être voté pour un vote positif/négatif, comme/n'aime pas, etc. Il permet à n'importe quel modèle d'être voté dans des portées arbitraires en utilisant cette gemme, nous pouvons voter pour n'importe quel modèle. les votes ne doivent pas nécessairement provenir d'un utilisateur, ils peuvent provenir de n'importe quel modèle (comme un groupe ou une équipe) et fournissent une syntaxe facile à écrire/lire.
Installation de gemmes
gemme 'acts_as_votable'Ajoutez la ligne ci-dessus dans Gemfile et exécutez l'installation du bundle Versions Ruby et Rails prises en charge
Ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1.0 Rails 3.0, 3.1, 3.2, 4.0, 4.1+Ce Gem utilise la table de vote pour enregistrer toutes les informations de vote. Pour générer une migration de vote, exécutez les commandes ci-dessous
les rails génèrent actes_as_votable: migration rake db: migrerPour évaluer n'importe quel modèle, utilisez simplement "acts_as_votable" dans le modèle Exemple:
class Article < ActiveRecord::Base actes_as_votable end @article = Article.new(:name => 'mon nouvel article') @article.save @article.liked_by @user @article.votes_for.size # => 1Vous trouverez ci-dessous quelques exemples de votes. Tous ces appels sont valides et acceptables.
@article.liked_by @user1 @article.downvote_from @user2 @article.vote_by :voter => @user3 @article.vote_by :voter => @user4, :vote => 'j'aime' @article.vote_by :voter => @user5 , :vote => 'Je n'aime pas'Par défaut, tous les votes sont positifs, donc @user3 a émis un « bon » vote pour @article. @user1, @user3 et @user4 ont tous voté en faveur de @article. @user2 et @user5 de l'autre ont voté contre @article. N'importe quel mot fonctionne pour voter en faveur ou contre un message comme Positif/Négatif, Haut/Bas, J'aime/Je n'aime pas... etc., les drapeaux booléens vrai et faux sont également applicables. Exemples avec des étendues : En utilisant ce joyau, nous pouvons ajouter une portée à notre vote
# votes positifs/j'aime @article.liked_by @user1, :vote_scope => 'rank' @article.vote_by :voter => @user3, :vote_scope => 'rank' @article.vote_by :voter => @user5, :vote => 'j'aime', :vote_scope => 'rank' # votes négatifs/Je n'aime pas @article.downvote_from @user2, :vote_scope => 'rank' @article.vote_by :voter => @user2, :vote => 'Je n'aime pas' , :vote_scope => 'rank' # comptez-les ! @article.find_votes_for(:vote_scope => 'rank').size # => 5 @article.get_likes(:vote_scope => 'rank').size # => 3 @article.get_upvotes(:vote_scope => 'rank'). .size # => 3 @article.get_dislikes(:vote_scope => 'rank').size # => 2 @article.get_downvotes(:vote_scope => 'rank').size # => 2 Le modèle votable # peut être voté sous différentes portées par le même utilisateur @article.vote_by :voter => @user1, :vote_scope => 'semaine' @article.vote_by :voter => @user1, :vote_scope => 'mois' @article.votes_for.size # => 2 @article.find_votes_for(:vote_scope => 'week').size # => 1 @article.find_votes_for(:vote_scope => 'month').size # => 1En ajoutant du poids à nos votes, nous pouvons ajouter du poids à notre vote. La valeur par défaut est 1.
# votes positifs/j'aime @article.liked_by @user1, :vote_weight => 1 @article.vote_by :voter => @user3, :vote_weight => 2 @article.vote_by :voter => @user5, :vote => 'like ', :vote_scope => 'rank', :vote_weight => 3 votes négatifs/Je n'aime pas # @article.downvote_from @user2, :vote_scope => 'rank', :vote_weight => 1 @article.vote_by :vote => @user2 , :vote => 'Je n'aime pas', :vote_scope => 'rank', :vote_weight => 3 # comptez-les ! @article.find_votes_for(:vote_scope => 'rank').sum(:vote_weight) # => 6 @article.get_likes(:vote_scope => 'rank').sum(:vote_weight) # => 6 @article.get_upvotes (:vote_scope => 'rank').sum(:vote_weight) # => 6 @article.get_dislikes(:vote_scope => 'rank').sum(:vote_weight) # => 4 @article.get_downvotes(:vote_scope = > 'rang').sum(:vote_weight) # => 4L'électeur, nous pouvons demander à nos électeurs d'agir_as_voter pour fournir une fonctionnalité de réserve. Par exemple
classe Utilisateur < ActiveRecord::Base actes_as_voter end @user.likes @article @article.votes.size # => 1 @article.likes.size # => 1 @article.dislikes.size # => 0Pour vérifier si un électeur a voté sur un modèle, on peut utiliser voté_for?. nous pouvons vérifier comment l'électeur a voté en utilisant voted_as_when_voted_for, nous pouvons également vérifier si l'électeur a voté pour ou contre. Alias pour les méthodes votées_up_on ? est voté_up_for ? , aimé? et voté_down_on ? est voté_down_for ?, n'aime pas ? nous pouvons également obtenir une liste de tous les objets pour lesquels un utilisateur a voté. Cela renvoie les objets réels au lieu des instances du modèle Vote. Tous les objets sont chargés avec impatience Votes enregistrés : Les électeurs ne peuvent voter qu'une seule fois par modèle. Dans cet exemple, le 2ème vote ne compte pas car @user a déjà voté pour @post.
@user.likes @post @user.likes @post @post.votes # => 1 @post.likes # => 1Pour vérifier si un vote a été compté ou enregistré, utilisez vote_registered ? sur notre modèle après vote. Par exemple:
@product.liked_by @user @product.vote_registered ? # => vrai @product.liked_by => @user @product.vote_registered ? # => faux, car @user a déjà voté de cette façon @product.disliked_by @user @product.vote_registered ? # => vrai, car l'utilisateur a modifié son votePour vérifier si un vote a été enregistré ou compté, utilisez vote_registered ? sur notre modèle après vote. Pour autoriser les entrées en double d'un même électeur, utilisez l'option duplicate. Notez également que cela limitera certaines autres méthodes qui ne traitent pas les votes multiples, dans ce cas, le dernier vote sera pris en compte.
@post.vote_by voteur : @user, :duplicate => trueMise en cache : Pour accélérer les performances, nous pouvons ajouter des colonnes de cache à la table de notre modèle votable. Ces colonnes seront automatiquement mises à jour après chaque vote. Contactez-nous ou commentez ci-dessous pour en savoir plus sur nous.
Abonnez-vous pour les dernières mises à jour
Articles Similaires