Agisce_Come_Votabile è una gemma di rubino scritta appositamente per i modelli Rails/ActiveRecord e questa gemma consente a qualsiasi modello di essere votato su voto positivo/negativo come/non mi piace, ecc. Consente a qualsiasi modello di essere votato in ambiti arbitrari utilizzando questa gemma possiamo votare qualsiasi modello. i voti non devono provenire da un utente, possono provenire da qualsiasi modello (come un gruppo o un team) e fornisce una sintassi facile da scrivere/leggere.
Installazione di gemme
gemma 'agisce_come_votabile'Aggiungi la riga sopra in Gemfile ed esegui l'installazione del bundle Versioni Ruby e Rails supportate
Ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1.0 Rotaie 3.0, 3.1, 3.2, 4.0, 4.1+Questa gemma utilizza la tabella dei voti per salvare tutte le informazioni sul voto. Per generare la migrazione dei voti, esegui i comandi seguenti
i binari generano act_as_votable:migration rake db:migratePer valutare qualsiasi modello è sufficiente utilizzare "acts_as_votable" nel modello Esempio:
class Article < ActiveRecord::Base act_as_votable end @article = Article.new(:name => 'il mio nuovo articolo') @article.save @article.liked_by @user @article.votes_for.size # => 1Di seguito sono riportati alcuni esempi di votazione. Tutti questi inviti sono validi e accettabili
@article.liked_by @user1 @article.downvote_from @user2 @article.vote_by :voter => @user3 @article.vote_by :voter => @user4, :vote => 'mi piace' @article.vote_by :voter => @user5 , :vote => 'Non mi piace'Per impostazione predefinita, tutti i voti sono positivi, quindi @user3 ha espresso un voto "buono" per @article. @user1, @user3 e @user4 hanno votato tutti a favore di @article. @user2 e @user5 dall'altro hanno votato contro @article. Qualsiasi parola funziona per esprimere un voto a favore o contro post come Positivo/Negativo, Su/Giù, Mi piace/Non mi piace... ecc., sono applicabili anche i flag booleani vero e falso. Esempi con ambiti: Usando questa gemma possiamo aggiungere uno scopo al nostro voto
# voti positivi/mi piace @article.liked_by @user1, :vote_scope => 'classifica' @article.vote_by :voter => @user3, :vote_scope => 'classifica' @article.vote_by :voter => @user5, :vote => 'mi piace', :vote_scope => 'classifica' # voti negativi/Non mi piace @article.downvote_from @user2, :vote_scope => 'classifica' @article.vote_by :voter => @user2, :vote => 'Non mi piace' , :vote_scope => 'classifica' # sommali! @article.find_votes_for(:vote_scope => 'classifica').size # => 5 @article.get_likes(:vote_scope => 'classifica').size # => 3 @article.get_upvotes(:vote_scope => 'classifica' ).size # => 3 @article.get_dislikes(:vote_scope => 'rank').size # => 2 @article.get_downvotes(:vote_scope => 'rank').size # => 2 Il modello votabile # può essere votato in ambiti diversi dallo stesso utente @article.vote_by :voter => @user1, :vote_scope => 'settimana' @article.vote_by :voter => @user1, :vote_scope => 'mese' @article.votes_for.size # => 2 @article.find_votes_for(:vote_scope => 'settimana').size # => 1 @article.find_votes_for(:vote_scope => 'mese').size # => 1Aggiungendo pesi ai nostri voti possiamo aggiungere peso al nostro voto. Il valore predefinito è 1.
# voti positivi/mi piace @article.liked_by @user1, :vote_weight => 1 @article.vote_by :voter => @user3, :vote_weight => 2 @article.vote_by :voter => @user5, :vote => 'mi piace ', :vote_scope => 'classifica', :vote_weight => 3 # voti negativi/Non mi piace @article.downvote_from @user2, :vote_scope => 'classifica', :vote_weight => 1 @article.vote_by :voter => @user2 , :vote => 'Non mi piace', :vote_scope => 'classifica', :vote_weight => 3 # contali! @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 = > 'classifica').sum(:voto_peso) # => 4L'Elettore che possiamo chiedere ai nostri elettori di agire_come_votante per fornire alcune funzionalità di riserva. Per esempio
class Utente < ActiveRecord::Base act_as_voter end @user.likes @article @article.votes.size # => 1 @article.likes.size # => 1 @article.dislikes.size # => 0Per verificare se un elettore ha votato per un modello, possiamo usare voted_for?. possiamo verificare come ha votato l'elettore utilizzando voted_as_when_voted_for, possiamo anche verificare se l'elettore ha votato a favore o contro. Alias per i metodi voted_up_on? è votato_up_for? , è piaciuto? e votato_down_on? è stato votato_down_for?, non mi è piaciuto? inoltre possiamo ottenere un elenco di tutti gli oggetti per i quali un utente ha votato. Ciò restituisce gli oggetti effettivi anziché le istanze del modello Vote. Tutti gli oggetti vengono caricati con entusiasmo Voti registrati: Gli elettori possono votare solo una volta per modello. In questo esempio il 2° voto non conta perché @user ha già votato per @post.
@user.likes @post @user.likes @post @post.votes # => 1 @post.likes # => 1Per verificare se un voto è stato conteggiato o registrato, utilizzare vote_registered? sul nostro modello dopo la votazione. Per esempio:
@product.liked_by @user @product.vote_registered? # => true @product.liked_by => @user @product.vote_registered? # => false, perché @user ha già votato in questo modo @product.disliked_by @user @product.vote_registered? # => true, perché l'utente ha cambiato il proprio votoPer verificare se un voto è stato registrato o conteggiato, utilizzare vote_registered? sul nostro modello dopo la votazione. Per consentire voci duplicate di uno stesso elettore, utilizzare l'opzione duplicato. Si noti inoltre che ciò limiterà alcuni altri metodi che non gestivano voti multipli, in questo caso verrà considerato l'ultimo voto.
@post.vote_by elettore: @user, :duplicate => trueMemorizzazione nella cache: Per velocizzare l'esecuzione possiamo aggiungere colonne di cache alla tabella del nostro modello votabile. Queste colonne verranno aggiornate automaticamente dopo ogni votazione. Contattaci o commenta qui sotto per saperne di più su di noi.
Iscriviti per gli ultimi aggiornamenti
Articoli correlati