Вы на правильном пути.Похоже, вам лучше использовать команду all
с условием подсчета, а не команду count
.Примерно так:
Point.all(:select => 'user_id, count(id) as point_count', :group => :user_id, :conditions => { :correct => 'yes' }, :order => 'point_count desc', :limit => 10)
Это вернет 10 ограниченных Point
объектов с атрибутом user_id
(так что вы все равно можете получить доступ к отношению user
) и атрибут point_count
с номеромправильных баллов, которые получил пользователь.
Примечание: вы можете изменить ограничение, чтобы число пользователей, которых вы хотели отобразить в таблице лидеров, можно было изменить.Этот пример вернул бы 10.
Возможно, было бы более целесообразно, чтобы ваш код выглядел следующим образом:
@points = Point.all(:select => 'user_id, count(id) as point_count', :group => :user_id, :conditions => { :correct => 'yes' }, :order => 'point_count desc', :limit => 10)
И, как я сказал в комментарии ниже, вы могли бы выполнять их итерацию, выполнивчто-то вроде этого (предполагается, что ваша модель User
имеет атрибут name):
<table>
<% @points.each do |point| %>
<tr>
<td><%= point.user.name %></td>
<td><%= point.point_count %></td>
</tr>
<% end %>
</table>