views:

72

answers:

0

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?