2012-03-26 5 views
1

Nous souhaitons implémenter un système dans notre application Rails qui permet aux utilisateurs d'évaluer les messages comme Vrai ou Faux. Lorsque l'utilisateur clique sur True, cela ajoutera un vote au nombre réel pour ce message. Nous voulons configurer ce système de sorte que si un utilisateur a déjà cliqué sur True, mais veut passer à False, il peut cliquer sur False, et ce vote sera transféré sur le nombre de colonnes False, immédiatement du côté client.Système d'évaluation des messages True ou False

Comment devrions-nous mettre en œuvre quelque chose comme ça?

nous avons cela dans micropost.rb

belongs_to :user 
    belongs_to :target_user, :class_name=>"User", :foreign_key=>"belongs_to_id" 
    has_many :ratings 

def rateable_by_user?(user) 
    self.ratings.where(:rater_id=>user.id).empty? 
end 

voici notre rating.rb actuelle

class Rating < ActiveRecord::Base 
    attr_accessible :micropost_id, :owner_id, :rater_id, :rating 
    belongs_to :micropost 
    belongs_to :target_user, :class_name=>"User", :foreign_key=>"owner_id" 
    belongs_to :user, :class_name=>"User", :foreign_key=>"rater_id" 
    scope :trues, where("rating = ?", "true") 
    scope :falses, where("rating = ?", "false") 
end 

Répondre

1

Je pense que vous avez la bonne idée. Je ne sais pas pourquoi vous avez deux belongs_to pour le modèle utilisateur (je me rends compte qu'il y a deux clés étrangères, je ne comprends pas pourquoi). Je pense vraiment que cela revient à créer un nouvel objet de notation si l'utilisateur n'en a pas pour cet article, en définissant la valeur correcte en fonction de laquelle il clique. S'ils ont une cote existante, il suffit d'échanger la valeur d'évaluation. Si ce n'est pas ce que vous recherchez, cela vous dérangerait-il de décrire l'aspect particulier du problème avec lequel vous rencontrez des problèmes?

+0

Je pense essayaient d'obtenir plus à une implémentation de style AJAX. Où, en cliquant sur False, l'évaluation de l'utilisateur est fausse, mais si vous cliquez sur True, vous la définissez simplement sur True. C'est presque difficile pour nous d'expliquer parce que le problème semble simple mais est vraiment très complexe. –

Questions connexes