Как отсортировать пользователей форума по "total_content_length", а затем по последнему сообщению? - PullRequest
0 голосов
/ 22 мая 2011

Я хочу отсортировать пользователей форума по total_content_length.Чтобы получить топ n авторов на форуме, я делаю:

User.order("total_content_length DESC").limit(n)

Теперь проблема в том, когда есть два (или более) пользователя с одинаковым total_content_length.В этом случае я бы хотел отдать предпочтение пользователю, который создал сообщение совсем недавно.

Post имеет поле publisher_id (это пользователь id).

Как бы вы это сделали?

Ответы [ 2 ]

1 голос
/ 22 мая 2011

Попробуйте использовать 2 оператора заказа:

User.order("total_content_length DESC").order("created_at DESC").limit(n)

Попробуйте это:

class User < ActiveRecord::Base
  scope :your_scope_name, joins(:posts).order("posts.created_at DESC")
end

тогда вы можете использовать это scope в сочетании с другими утверждениями

0 голосов
/ 22 мая 2011

Определите метод в вашей пользовательской модели, который дает дату последнего сообщения (при условии, что у вас есть связь сообщений):

def date_of_last_post  
  posts.order('created_at DESC').limit(1)[0].created_at  
end

Тогда вы можете получить результат как:

top_posters = User.order("total_content_length DESC").limit(n)
# write a conditional sorting algo that swaps values only 
# if a.total_content_length == b.total_content_length based on 'date_of_last_post'
...