Рейтинг пользователей с rails3 и mongodb - PullRequest
1 голос
/ 01 апреля 2012

Я пытаюсь реализовать ранжирование пользователей с помощью mongodb. Таким образом, у пользователя есть два поля:

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

и для перечисления всех пользователей в таблице результатов можно легко сделать что-то вроде этого:

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

Но вопрос таков: как отобразить рейтинг пользователя на странице пользователя?

Очевидно, что нам нужно сохранить ранг , но , где и , как правильно его обновить ?

Самый простой способ сделать это - что-то вроде этого:

# 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 Ответ

1 голос
/ 02 апреля 2012

Если вам не нужно делать запрос по рангу, то вы можете рассчитать его на лету.Допустим, ваш размер страницы составляет 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 %>
...