2012-04-01 14 views
1

私はmongodbでユーザーランキングを実装しようとしています。rails3とmongodbを使ったユーザーランキング

field :score, type: Integer, :default => 0 
    field :solution_count, type: Integer, :default => 0 

、もう1つは簡単にこのようになめらかでくださいすることができ、スコアテーブル内のすべてのユーザーが一覧表示する:

User.desc(:score, :solution_count).page(params[:page]) 

をしかし質問は次のとおりですので、ユーザーには2つのフィールドがあり、ユーザーのランクを表示する方法ユーザーページ?

我々がと適切それを更新する方法店のランクが、に必要なことは明らかですか?

それを行うための最も簡単な方法は、このようななめらかです:

# in user.rb 
field :rank, type: Integer 

# add rake task and execute is with Cron every 10 minutes for example 
task :build => :environment do 
    User.desc(:score, :solution_count).each_with_index do |user, position| 
    user.update_attribute(:rank, position + 1) 
    end 
end 

任意のアイデア、より良い、それを実装する方法?

答えて

1

ランクでクエリする必要がない場合は、オンザフライで計算できます。たとえば、ページサイズが20で、最初のページが表示されているとします。その後、ユーザーは1から20までのランクを持ちます。次のページのユーザーはランク21-40になります。等々。

page_no = params[:page].to_i 
users = User.desc(:score, :solution_count).page(page_no) 
users.each_with_index do |u, idx| 
    u.rank = (page_no * page_size) + idx + 1 
end 

# go on and display users with ranks. 
<%= u.rank %> 
+0

しかし、どうすればユーザーページに表示できますか?私はDBに格納し、このuser.rankのようなビューでアクセスする必要があります – makaroni4

+0

私のコードサンプルを読んでください。 DBからユーザーを取得し、実行時にランクを計算します。次に、あなたはそれを表示することができます。 –

+0

私はそれを得ましたが、それを行う適切な場所はどこですか?このランク付けされたものをすべて赤字にする必要がありますか? – makaroni4

関連する問題