What do I need to change to get this 'acts_as_rateable' Rails plugin working with this code from the
- by tepidsam
Hello!
I'm working my way through the 'Foundation Rails 2' book. In Chapter 9, we are building a little "plugins" app. In the book, he installs the acts_as_rateable plugin found at http://juixe.com/svn/acts_as_rateable. This plugin doesn't appear to exist in 2010 (the page for this "old" plugin seems to be working again...it was down when I tried it earlier), so I found another acts_as_rateable plugin at http://github.com/azabaj/acts_as_rateable.
These plugins are different and I'm trying to get the "new" plugin working with the code/project/app from the Foudations 2 book.
I was able to use the migration generator included with the "new" plugin and it worked. Now,though, I'm a bit confused. In the book, he has us create a new controller to work with the plugin (the old plugin). Here's the code for that:
class RatingsController < ApplicationController
def create
@plugin = Plugin.find(params[:plugin_id])
rating = Rating.new(:rating => params[:rating])
@plugin.ratings << average_rating
redirect_to @plugin
end
end
Then he had us change the routing:
map.resources :plugins, :has_many => :ratings
map.resources :categories
map.root :controller => 'plugins'
Next, we modified the following to the 'show' template so that it looks like this:
<div id="rate_plugin">
<h2>Rate this plugin</h2>
<ul class="star-rating">
<li>
<%= link_to "1", @plugin.rate_it(1),
:method => :post, :title => "1 star out of 5",
:class => "one-star" %>
</li>
<li>
<%= link_to "2", plugin_ratings_path(@plugin, :rating => 2),
:method => :post, :title => "2 stars out of 5",
:class => "two-stars" %>
</li>
<li>
<%= link_to "3", plugin_ratings_path(@plugin, :rating => 3),
:method => :post, :title => "3 stars out of 5",
:class => "three-stars" %>
</li>
<li>
<%= link_to "4", plugin_ratings_path(@plugin, :rating => 4),
:method => :post, :title => "4 stars out of 5",
:class => "four-stars" %>
</li>
<li>
<%= link_to "5", plugin_ratings_path(@plugin, :rating => 5),
:method => :post, :title => "5 stars out of 5",
:class => "five-stars" %>
</li>
</ul>
</div>
The problem is that we're using code for a different plugin. When I try to actually "rate" one of the plugins, I get an "unknown attribute" error. That makes sense. I'm using attribute names for the "old" plugin, but I should be using attributes names for the "new" plugin. The problem is...I've tried using a variety of different attribute names and I keep getting the same error. From the README for the "new" plugin, I think I should be using some of these but I haven't been able to get them working:
Install the plugin into your vendor/plugins directory, insert 'acts_as_rateable' into your model, then restart your application.
class Post < ActiveRecord::Base
acts_as_rateable
end
Now your model is extended by the plugin, you can rate it ( 1-# )or calculate the average rating.
@plugin.rate_it( 4, current_user.id )
@plugin.average_rating #=> 4.0
@plugin.average_rating_round #=> 4
@plugin.average_rating_percent #=> 80
@plugin.rated_by?( current_user ) #=> rating || false
Plugin.find_average_of( 4 ) #=> array of posts
See acts_as_rateable.rb for further details!
I'm guessing that I might have to make some "bigger" changes to get this plugin working. I'm asking this question to learn and only learn. The book gives code to get things working with the old plugin, but if one were actually building this app today it would be necessary to use this "new" plugin, so I would like to see how it could be used.
Cheers!
Any ideas on what I could change to get the "new" plugin working?