2010-08-03 5 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 

Давайте скажем, 50 пользователей проголосовали на VoteItem1, что это лучший способ узнать, что другие VoteItem (s) большинство из тех же 50 пользователей проголосовали на?Tricky Ассоциация Вопрос Rails

Thanks

ответ

0

Вы не слишком конкретны в отношении того, что составляет большинство. Что-то вроде этого должно возвращать элементы, проголосованные за набор пользователей, от самого высокого до самого низкого. Вы можете добавить условие, в котором vote_count больше, чем большинство.

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

Большинство где из тех 50, кто голосовал за VoteItem1, 47 проголосовали за VoteItem2, 42 проголосовали за VoteItem3 и т.д. Таким образом, большинство из них не является специфичным. Это определяется как то, что другое vote_item имеет максимальное количество пользователей из этого набора избирателей. Я ищу набор vot_items, идентифицированных так, как это упорядочено по количеству пользователей, с которыми они имеют общего с этим набором из 50. Надеюсь, что это имеет смысл. Благодаря! – badnaam

+0

О, круто. То, что я написал выше, должно работать тогда. Дайте мне знать, если это сбивает с толку в синтаксисе, или мой ответ слишком короткий. – mark

+0

Mark, спасибо. Здесь нет модели Voteable. – badnaam

Смежные вопросы