2010-08-03 7 views
0
#Vote Model 
belongs_to :voteable, :polymorphic => true 
belongs_to :voter, :polymorphic => true 

#votes table 
Voteid: integer, vote: boolean, voteable_id: integer, voteable_type: string, voter_id: integer, voter_type: string, created_at: datetime, updated_at: datetime 

#User 
    has_many :voteables, :foreign_key => :voter_id, :class_name => "Vote" 
    has_many :votes, :foreign_key => :voter_id 

#Vote_Item model 
acts_as_voteable 
has_many :voters, :class_name => "Vote", :foreign_key => :voteable_id 

Disons que 50 utilisateurs ont voté sur VoteItem1, quelle est la meilleure façon de savoir, quels autres VoteItem (s) la majorité de ces mêmes 50 utilisateurs ont voté?Tricky Association Question Rails

Merci

Répondre

0

Vous n'êtes pas trop précis sur ce qui constitue la majorité. Quelque chose comme ceci devrait renvoyer des articles votés par une collection d'utilisateurs, du plus haut au plus bas. Vous pouvez ajouter une condition où vote_count est supérieur à la majorité.

Vote_Item.find(:all, :joins => :votes, 
        :select => "votes.*, count(votes) vote_count", 
        :conditions => {:votes => {:user => @users}}, 
        :group => "vote_items.id", :order => "vote_count desc") 
+0

La majorité est là sur les 50 qui ont voté pour VoteItem1, 47 ont voté pour VoteItem2, 42 ont voté pour VoteItem3 etc. Donc, la majorité n'est pas spécifique. Il est défini comme ce que l'autre vote_item a le nombre maximum d'utilisateurs de cet ensemble d'électeurs. Je suis à la recherche d'un ensemble de votes_items identifiés comme cela ordonné par le nombre d'utilisateurs qu'ils ont en commun avec cet ensemble de 50. Espérons que cela a du sens. Merci! – badnaam

+0

Oh cool. Ce que j'ai posté ci-dessus devrait fonctionner alors. Faites-moi savoir si c'est confus dans sa syntaxe ou si ma réponse est trop brève. – mark

+0

Mark, merci. Il n'y a pas de modèle Votable ici même si – badnaam

Questions connexes