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
gema '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: migrarPara calificar cualquier modelo simplemente use "acts_as_votable" en el modelo Ejemplo:
clase Artículo < ActiveRecord::Base acts_as_votable end @article = Article.new(:name => 'mi nuevo artículo') @article.save @article.liked_by @user @article.votes_for.size # => 1A 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 => 'me gusta' @article.vote_by :voter => @user5 , :votar => 'No me gusta'Por defecto, todos los votos son positivos, por lo que @usuario3 ha emitido un voto "bueno" para @artículo. @usuario1, @usuario3 y @usuario4 votaron a favor de @artículo. @ usuario2 y @ usuario5 por el otro votaron en contra de @ artículo. Cualquier palabra sirve para emitir un voto a favor o en contra de publicaciones como Positivo/Negativo, Arriba/Abajo, Me gusta/No me gusta, etc. También se aplican los indicadores booleanos verdadero y falso. Ejemplos con alcances: Usando esta gema podemos agregar un alcance a nuestro voto.
# votos positivos/me gusta @article.liked_by @user1, :vote_scope => 'rank' @article.vote_by :voter => @user3, :vote_scope => 'rank' @article.vote_by :voter => @user5, :vote => 'me gusta', :vote_scope => 'clasificación' # votos negativos/No me gusta @article.downvote_from @user2, :vote_scope => 'clasificación' @article.vote_by :voter => @user2, :vote => 'No me gusta' , :vote_scope => 'rank' # ¡Cuéntalos! @article.find_votes_for(:vote_scope => 'rango').tamaño # => 5 @article.get_likes(:vote_scope => 'rango').tamaño # => 3 @article.get_upvotes(:vote_scope => 'rango' ).size # => 3 @article.get_dislikes(:vote_scope => 'rank').size # => 2 @article.get_downvotes(:vote_scope => 'rank').size # => 2 # El modelo votable puede ser votado en diferentes ámbitos por el mismo usuario @article.vote_by :voter => @user1, :vote_scope => 'semana' @article.vote_by :voter => @user1, :vote_scope => 'mes' @article.votes_for.size # => 2 @article.find_votes_for(:vote_scope => 'semana').tamaño # => 1 @article.find_votes_for(:vote_scope => 'mes').tamaño # => 1Al agregar pesos a nuestros votos, podemos agregar peso a nuestro voto. El valor predeterminado es 1.
# votos positivos/me gusta @article.liked_by @user1, :vote_weight => 1 @article.vote_by :voter => @user3, :vote_weight => 2 @article.vote_by :voter => @user5, :vote => 'me gusta ', :vote_scope => 'rango', :vote_weight => 3 # votos negativos/No me gusta @article.downvote_from @user2, :vote_scope => 'rango', :vote_weight => 1 @article.vote_by :voter => @user2 , :vote => 'No me gusta', :vote_scope => 'rank', :vote_weight => 3 # ¡Cuéntalos! @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 => 'rango').sum(:vote_weight) # => 6 @article.get_dislikes(:vote_scope => 'rango').sum(:vote_weight) # => 4 @article.get_downvotes(:vote_scope = > 'rango').sum(:voto_peso) # => 4El 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 # => 0Para 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 # => 1Para 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 votoPara comprobar si un voto se registró o se contó, utilice vote_registered? en nuestro modelo después de votar. Para permitir entradas duplicadas de un mismo votante, utilice la opción duplicar. Tenga en cuenta también que esto limitará algunos otros métodos que no se ocupan de votos múltiples; en este caso, se considerará el último voto.
@post.vote_by votante: @user, :duplicate => trueAlmacenamiento en caché: Para acelerar el rendimiento, podemos agregar columnas de caché a la tabla de nuestro modelo votable. Estas columnas se actualizarán automáticamente después de cada votación. Contáctenos o comente a continuación para saber más sobre nosotros.
Suscríbete para recibir las últimas actualizaciones
Artículos Relacionados