Rateable is a project mainly written in RUBY and JAVASCRIPT, it's free.
A simple gem for ajax rating
= Rateable
This is my own simple way to add ajax voting to a rails application.
== Installation
Add the Gem to your Gemfile
gem "glynx_rateable"
Then install the Gem
bundle install
=== Generating Files
After installing you should generate the needed files
rails generate rateable
=== Migrating
Then apply the migration to your Database
rake db:migrate
=== Includes
Add the "rateable.css" and "rateable.js" to the includes in your layout file
== Usage
=== Model
Add to the user model that should be able to rate things:
class User < ActiveRecord::Base is_rater end
Add to the model that should be rateable
class Model < ActiveRecord::Base is_rateable end
=== Controller
Add a rate action to the controller of the model that should be rateable, it should look like this:
def rate
# Check if the current user has already voted
if current_user and current_user.ratings.where(:rateable => @model).empty?
@model.rate(current_user, params[:stars])
render :partial => "rateable/rating", :locals => {:rating => @model.ratings.average("stars").to_i}
else
render :text => "You have already voted for this item!", :status => 500
end
end
=== Routes
Add a post action called "rate" to the resource in your "config/routes.rb"
resources :models do member do post :rate end end
=== Views
In your Views you can add the rating stars by adding:
<%= rating_for @model %>
You can also supply the url for the rate action manually, for example when using nested resources
<%= rating_for @model, :url => url_for([:rate, @category, @model]) %>
If there is no current_user method you can also supply your current user like this:
<%= rating_for @model, :user => @user %>