2010-12-13 2 views
1

В приложении Rails я хочу, чтобы все пользователи, заказанные по их количеству комментариев, получали список лучших комментаторов. Как мне это сделать, в частности?Выделить всех пользователей, заказать их по их комментариям

В моей модели пользователь и комментарий находятся в отношениях HABTM друг к другу.

Прямо сейчас у меня есть:

all_users = User.all :joins => :comments 
    all_users.sort_by do |user| 
    user.comments.count 
    end 

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

Что было бы более эффективным способом сделать это, например. в самом запросе?

Благодаря

ответ

1

вы всегда можете сделать

User.all(:joins => :comments, :group => 'users.id', :order => 'count(*)') 

, если он не ударил производительность дб

+0

Спасибо, это было именно то, что мне нужно! – slhck

3

Если у вас были belongs_to :user в модели Comment сконфигурированной как это:

belongs_to :user, :counter_cache => true 

И тогда вы имели comments_count целое поле недобросовестного 0 в вашей users таблицы, то вы могли бы для этого, а не для того, чтобы присоединиться.

+0

Спасибо, Райан. В моей конкретной настройке «Пользователь» и «Комментарий» находятся в отношении HABTM друг к другу, так что же мне тогда делать? – slhck