¿Cómo utilizar Acts_As_Votable Gem?

Actos_como_votables es una gema Ruby escrita específicamente para modelos Rails/ActiveRecord y esta gema permite que cualquier modelo sea votado a favor/en contra, me gusta/no me gusta, etc. Permite que cualquier modelo sea votado bajo ámbitos arbitrarios usando esta gema, podemos votar cualquier modelo. Los votos no tienen que provenir de un usuario, pueden provenir de cualquier modelo (como un grupo o equipo) y proporciona una sintaxis fácil de escribir/leer. Instalación de gemas
gem ‘acts_as_votable’
Agregue la línea anterior en Gemfile y ejecute la instalación del paquete. Versiones compatibles de Ruby y Rails.
Rubí 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1.0 Rieles 3.0, 3.1, 3.2, 4.0, 4.1+
Esta gema utiliza una tabla de votación para guardar toda la información de votación. Para generar migración de votos, ejecute los siguientes comandos
los rieles generan actos_as_votable: migración rake db: migrar
To rate any model just use “acts_as_votable” in model Ejemplo:
class Article < ActiveRecord::Base acts_as_votable end @article = Article.new(:name => ‘my new article’) @article.save @article.liked_by @user @article.votes_for.size # => 1
A continuación se muestran algunos ejemplos de votación. Todas estas convocatorias son válidas y aceptables.
@article.liked_by @user1 @article.downvote_from @user2 @article.vote_by :voter => @user3 @article.vote_by :voter => @user4, :vote => ‘like’ @article.vote_by :voter => @user5, :vote => ‘Dislike’
By default all votes are positive, so @user3 has cast a ‘good’ vote for @article. @user1, @user3, and @user4 all voted in favor of @article. @user2 and @user5 on the other had has voted against @article. Any word works for casting a vote in favor or against post like Positive/Negative, Up/Down, Like/Dislike.. etc, Boolean flags true and false are also applicable. Ejemplos con alcances: Usando esta gema podemos agregar un alcance a nuestro voto.
# positive/like votes @article.liked_by @user1, :vote_scope => ‘rank’ @article.vote_by :voter => @user3, :vote_scope => ‘rank’ @article.vote_by :voter => @user5, :vote => ‘like’, :vote_scope => ‘rank’ # negative/Dislike votes @article.downvote_from @user2, :vote_scope => ‘rank’ @article.vote_by :voter => @user2, :vote => ‘Dislike’, :vote_scope => ‘rank’ # tally them up! @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 # votable model can be voted under different scopes by the same user @article.vote_by :voter => @user1, :vote_scope => ‘week’ @article.vote_by :voter => @user1, :vote_scope => ‘month’ @article.votes_for.size # => 2 @article.find_votes_for(:vote_scope => ‘week’).size # => 1 @article.find_votes_for(:vote_scope => ‘month’).size # => 1
Al agregar pesos a nuestros votos, podemos agregar peso a nuestro voto. El valor predeterminado es 1.
# positive/like votes @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 # negative/Dislike votes @article.downvote_from @user2, :vote_scope => ‘rank’, :vote_weight => 1 @article.vote_by :voter => @user2, :vote => ‘Dislike’, :vote_scope => ‘rank’, :vote_weight => 3 # tally them up! @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 => ‘rank’).sum(:vote_weight) # => 4
El Votante podemos hacer que nuestros votantes actúen_como_votante para proporcionar alguna funcionalidad de reserva. Por ejemplo
clase Usuario < ActiveRecord::Base acts_as_voter end @user.likes @article @article.votes.size # => 1 @article.likes.size # => 1 @article.dislikes.size # => 0
Para comprobar si un votante ha votado por un modelo, podemos utilizar voted_for?. Podemos verificar cómo votó el votante usando voted_as_when_voted_for, también podemos verificar si el votante votó a favor o en contra. ¿Alias para los métodos votados_up_on? ¿Se ha votado a favor? , ¿apreciado? y votado_en contra? ¿Se ha votado_en contra_a favor?, ¿no le gusta? También podemos obtener una lista de todos los objetos por los que ha votado un usuario. Esto devuelve los objetos reales en lugar de instancias del modelo Vote. Todos los objetos están ansiosos por cargar Votos registrados: Los votantes sólo pueden votar una vez por modelo. En este ejemplo, el segundo voto no cuenta porque @user ya votó por @post.
@usuario.likes @post @usuario.likes @post @post.votes # => 1 @post.likes # => 1
Para verificar si un voto fue contado o registrado, use vote_registered? en nuestro modelo después de votar. Por ejemplo:
@product.liked_by @user @product.vote_registered? # => verdadero @product.liked_by => @user @product.vote_registered? # => falso, ¿porque @user ya votó de esta manera @product.disliked_by @user @product.vote_registered? # => verdadero, porque el usuario cambió su voto
To check if a vote registered or counted, use vote_registered? on our model after voting. To permit duplicates entries of a same voter, use option duplicate. Also notice that this will limit some other methods that didn’t deal with multiples votes, in this case, the last vote will be considered.
@post.vote_by votante: @user, :duplicate => true
Almacenamiento en caché: To speed up perform we can add cache columns to our votable model’s table. These columns will automatically be updated after each vote. Contáctenos o comente a continuación para saber más sobre nosotros.

Suscríbete para recibir las últimas actualizaciones

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Spanish
English
English
Japanese
German
French
Spanish

envíanos whatsapp

Salir de la versión móvil