Voteable Mongoid allows you to make your Mongoid::Document objects voteable (up or down)
For instance, in a Q&A site, a user can vote up (or down) on a post or a comment.
When user provided enough information, voteable_mongoid will use only one update-in-place operation per collection.
To install the gem, add this to your Gemfile
After that, remember to run “bundle install”
Making Post and Comment voteable, User being the voter
class Post include Mongoid::Document include Mongoid::Voteable # set points for each vote vote_point self, :up => +1, :down => -1 references_many :comments end
require 'post' class Comment include Mongoid::Document include Mongoid::Voteable referenced_in :post vote_point self, :up => +1, :down => -3 # each vote on a comment can affect votes count and point of the related post as well vote_point Post, :up => +2, :down => -1 end
class User include Mongoid::Document include Mongoid::Voter end
Making a vote
@user.vote(@post, :up) # is equivalent to @post.vote(:voter_id => @user.id, :value => :up) # this will affect @post.votes_count and @post.votes_point as well @user.vote(@comment, :down)
Getting votes count and points
puts @post.votes_point puts @post.votes_count puts @post.up_votes_count puts @post.down_votes_count
Getting the list of voted objects (votees) of a class
Undo a vote
Alex N. - Author
Stefan N. - Unvoting
Copyright © 2010-2011 Vinova Pte Ltd (vinova.sg)
Licensed under the MIT license.