2016-06-18 5 views
0

私は多くの投票を持つユーザーモデルを持っています。投票はユーザー間で同じにすることができます。投票モデルには多数の投票があります。ユーザーモデルにも多数の票があります。投票モデルには、ユーザーID、投票ID、および選択されたオプションがあります。私は、与えられたユーザーのために、投票が最も多い投票を見つけたいと思っています。余分な条件を持つhas_many関係の中で最も多くを見つける

counter_cacheが見つかりましたが、この問題にどのように適用するかはわかりません。ユーザーがそれぞれのポーリングを繰り返し、used_id = user_Idの最大のカウントを見るよりも、これを解決するより良い方法はありますか?

答えて

0

はい、counter_cacheでこれを行うことができます。 pollsテーブルには、votes_countという列があります。あなたの移行は次のようになります。

add_column :polls, :votes_count, :integer, default: 0 

とレコードを見つけるためのアプローチは、次のようになります。

class User 
    has_many :polls 
    has_many :votes 
end 

class Poll 
    has_many :votes 
end 

class Vote 
    belongs_to :user 
    belongs_to :poll, counter_cache :true 
    ##attr :option_chosen 
end 

あなたはカウンタをリセットする必要があるテーブルを追加する前に、いくつかのレコードを持っていた場合。

は今、最も多くの票を投票を取得するために、あなたは簡単に行うことができます:助け

User.first.polls.order(votes_count: :desc).first

希望。

関連する問題