Je ne pense pas que vous avez besoin d'un plugin pour le faire que ... vous pourriez faire ce qui suit avec 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
Bien sûr, avec cette approche, vous auriez une réplication au nom de Rating, quelque chose qui n'est pas si mauvais (normaliser les tables juste pour un champ ne le coupe pas).
Sounds comme si vous aviez besoin d'un modèle de classement comportant trois clés: movie_id, attribute_id et user_id. – tadman