= 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. When user provided enough information, voteable_mongoid will use only one update-in-place operation per collection. 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.