开发者

How do you rate multiple attributes of the same object?

开发者 https://www.devze.com 2022-12-18 12:42 出处:网络
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 pl

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?


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).


You can also use a plugin ajaxfull-rating


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

0

精彩评论

暂无评论...
验证码 换一张
取 消