Hur använder man Acts_As_Votable Gem?

Fungerar_Som_Votable är ruby pärla speciellt skriven för Rails/ActiveRecord-modeller och denna pärla gör att alla modeller kan röstas upp/ned, gilla/ogilla, etc. Det gör att alla modeller kan röstas under godtyckliga omfattningar med denna pärla, vi kan rösta på vilken modell som helst. röster behöver inte komma från en användare, de kan komma från vilken modell som helst (som en grupp eller ett team) och det ger en syntax som är lätt att skriva/läsa. Gem Installation
pärla "fungerar_som_votable"
Lägg till ovanstående rad i Gemfile och kör buntinstallation Stödda ruby- och rails-versioner
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+
Denna pärla använder rösttabellen för att spara all röstinformation. För att generera röstmigrering, kör under kommandon
rails genererar acts_as_votable:migration rake db:migrate
För att betygsätta vilken modell som helst, använd bara "acts_as_votable" i modellen Exempel:
class Article < ActiveRecord::Base acts_as_votable end @article = Article.new(:name => 'min nya artikel') @article.save @article.liked_by @user @article.votes_for.size # => 1
Nedan finns några exempel på röstning. Alla dessa samtal är giltiga och acceptabla
@article.liked_by @user1 @article.downvote_from @user2 @article.vote_by :voter => @user3 @article.vote_by :voter => @user4, :vote => 'gilla' @article.vote_by :voter => @user5 , :vote => 'ogillar'
Som standard är alla röster positiva, så @user3 har lagt en "bra" röst på @artikel. @användare1, @användare3 och @användare4 röstade alla för @artikel. @användare2 och @användare5 hade å andra sidan röstat emot @artikel. Alla ord fungerar för att rösta för eller emot inlägg som positiv/negativ, upp/ner, gilla/ogilla... etc, booleska flaggor sant och falskt är också tillämpliga. Exempel med omfattningar: Genom att använda denna pärla kan vi lägga till en omfattning till vår röst
# positiva/gilla röster @article.liked_by @user1, :vote_scope => 'rank' @article.vote_by :voter => @user3, :vote_scope => 'rank' @article.vote_by :voter => @user5, :vote => 'gilla', :vote_scope => 'rank' # negativ/ogillar röster @article.downvote_from @user2, :vote_scope => 'rank' @article.vote_by :voter => @user2, :vote => 'ogillar' , :vote_scope => 'ranka' # räknar ihop dem! @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 # röstbar modell kan vara röstade under olika omfång av samma användare @article.vote_by :voter => @user1, :vote_scope => 'vecka' @article.vote_by :voter => @user1, :vote_scope => 'month' @article.votes_for.size # => 2 @article.find_votes_for(:vote_scope => 'vecka').storlek # => 1 @article.find_votes_for(:vote_scope => 'månad').storlek # => 1
Genom att lägga till vikter till våra röster kan vi lägga till vikt till vår röst. Standardvärdet är 1.
# positiva/gilla-röster @article.liked_by @user1, :vote_weight => 1 @article.vote_by :voter => @user3, :vote_weight => 2 @article.vote_by :voter => @user5, :vote => 'gilla ', :vote_scope => 'rank', :vote_weight => 3 # negativa/ogillar röster @article.downvote_from @user2, :vote_scope => 'rank', :vote_weight => 1 @article.vote_by :voter => @user2 , :vote => 'ogillar', :vote_scope => 'rank', :vote_weight => 3 # räknar ihop dem! @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
Väljaren vi kan ha våra väljare agerar_som_väljare för att tillhandahålla viss reservfunktionalitet. Till exempel
class User < ActiveRecord::Base acts_as_voter end @user.likes @article @article.votes.size # => 1 @article.likes.size # => 1 @article.dislikes.size # => 0
För att kontrollera om en väljare har röstat på en modell kan vi använda voted_for?. vi kan kontrollera hur väljaren röstat genom att använda röstade_som_när_röstade_på, vi kan också kontrollera om väljaren har röstat upp eller ner. Alias för metoder röstade_upp_på? är uppröstad? , gillade? och röstade_ned_på? är nedröstade_för?, ogillas? Vi kan också få en lista över alla objekt som en användare har röstat på. Detta returnerar de faktiska objekten istället för instanser av Vote-modellen. Alla föremål är ivrigt laddade Registrerade röster: Väljare kan bara rösta en gång per modell. I det här exemplet räknas inte den andra rösten eftersom @användare redan har röstat på @post.
@user.likes @post @user.likes @post @post.votes # => 1 @post.likes # => 1
För att kontrollera om en röst har räknats eller registrerats, använd vote_registered? på vår modell efter röstning. Till exempel:
@product.liked_by @user @product.vote_registered? # => sant @product.liked_by => @användare @product.vote_registered? # => falskt, eftersom @användare redan har röstat på detta sätt @product.disliked_by @user @product.vote_registered? # => sant, eftersom användaren ändrade sin röst
För att kontrollera om en röst har registrerats eller räknats, använd vote_registered? på vår modell efter röstning. För att tillåta dubbletter av inlägg av samma väljare, använd alternativet dubblett. Observera också att detta kommer att begränsa vissa andra metoder som inte handlade om flera röster, i det här fallet kommer den sista rösten att övervägas.
@post.vote_by voter: @user, :duplicate => true
Cachning: För att snabba upp prestanda kan vi lägga till cache-kolumner i vår röstbara modells tabell. Dessa kolumner kommer automatiskt att uppdateras efter varje omröstning. Kontakta oss eller kommentera nedan för att veta mer om oss.

Prenumerera för de senaste uppdateringarna

relaterade inlägg

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESwedish