= Voteable Mongoid Voteable Mongoid allows you to make your Mongoid::Document objects voteable (up or down) For instance, in a forum, a user can vote up (or down) on a post or a comment. Voteable Mongoid is built for speed. It minimizes vote data storage and uses only one database request per collection to do both data validation and data update. Sample app at https://github.com/vinova/simple_qa == Installation === Rails 3.0.x To install the gem, add this to your Gemfile gem 'voteable_mongoid' After that, remember to run "bundle install" == Usage === Making Post and Comment voteable, User being the voter post.rb class Post include Mongoid::Document include Mongoid::Voteable # set points for each vote voteable self, :up => +1, :down => -1 references_many :comments end comment.rb require 'post' class Comment include Mongoid::Document include Mongoid::Voteable referenced_in :post voteable self, :up => +1, :down => -3 # each vote on a comment can affect votes count and point of the related post as well voteable Post, :up => +2, :down => -1 end user.rb 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 @user.votees(Post) === Undo a vote @user.unvote(@comment) === Re-generate counters and vote points Rails rake db:mongoid:voteable:remake_stats Ruby Mongoid::Voteable::Stats.remake === Set counters and point to 0 for uninitialized voteable objects in order sort and query Rails rake db:mongoid:voteable:init_stats Ruby Mongoid::Voteable::Stats.init == Credits * Alex N. - Author * Stefan N. - Unvoting Copyright (c) 2010-2011 Vinova Pte Ltd (http://vinova.sg) Licensed under the MIT license.