views:

56

answers:

3

I've not seen this feature as a plug in and was wondering how to achieve it, hopefully using rails.

The feature I'm after is the ability to rate one object (a film) by various attributes such as plot, entertainment, originality etc etc on one page/form.

Can anyone help?

+1  A: 

I don't think you need a plugin to do just that... you could do the following with AR

class Film < ActiveRecord::Base
  has_many :ratings, :as => :rateable

  def rating_for(field)
    ratings.find_by_name(field).value
  end

  def rating_for=(field, value)
    rating = nil
    begin
      rating = ratigns.find_by_name(field)
      if rating.nil?
        rating = Rating.create!(:rateable => self, :name => field, :value => value)
      else
        rating.update_attributes!(:value => value)
      end
    rescue ActiveRecord::RecordInvalid
      self.errors.add_to_base(rating.errors.full_messages.join("\n"))
    end
  end

end

class Rating < ActiveRecord::Base
  # Has the following field:
  # column :rateable_id, Integer
  # column :name, String
  # column :value, Integer
  belongs_to :rateable, :polymorphic => true
  validates_inclusion_of :value, :in => (1..5)
  validates_uniqueness_of :name, :scope => :rateable_id

end

Of course, with this approach you would have a replication in the Rating name, something that is not that bad (normalize tables just for one field doesn't cut it).

Roman Gonzalez
A: 

You can also use a plugin ajaxfull-rating

msarvar
A: 

Here's another, possibly more robust rating plugin...it's been around for a while and has been revised to work with Rails 2

http://agilewebdevelopment.com/plugins/acts_as_rateable

btelles