This is my own simple way to add ajax voting to a rails application.
Add the Gem to your Gemfile
gem "glynx_rateable"
Then install the Gem
bundle install
After installing you should generate the needed files
rails generate rateable
Then apply the migration to your Database
rake db:migrate
Add the “rateable.css” and “rateable.js” to the includes in your layout file
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
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
Add a post action called “rate” to the resource in your “config/routes.rb”
resources :models do member do post :rate end end
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 %>