2010-02-01 10 views
1

Je n'ai pas vu cette fonctionnalité comme un plug in et je me demandais comment y parvenir, j'espère utiliser des rails.Comment évaluez-vous plusieurs attributs du même objet?

La caractéristique que je suis après est la capacité de noter un objet (un film) par divers attributs tels que l'intrigue, le divertissement, l'originalité etc etc sur une page/formulaire.

Quelqu'un peut-il aider?

+1

Sounds comme si vous aviez besoin d'un modèle de classement comportant trois clés: movie_id, attribute_id et user_id. – tadman

Répondre

1

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