2011-10-03 56 views
0

我的网站上的用户每次点击他们发布的链接时都会获得积分。现在我可以通过使用显示每个人的列表,使用Ruby on Rails创建前5排行榜

@users = User.all 

<table> 
<tr> 
<th>User</th> 
<th>Points</th> 
</tr> 
<% @users.sort_by{|u| u.clicks.size }.reverse.each do |u| %> 
    <tr> 
    <td><%= u.name %></td> 
    <td><%= u.clicks.size %></td> 
    </tr> 
<% end %> 
</table> 

我该如何让块通过所有的用户,然后只显示前5名?使用break if方法不起作用。

回答

4

如何:

@users.sort_by{|u| u.clicks.size }.reverse[0...5].each do |u| 

或者废除了通过否定完全扭转sort_by

@users.sort_by{|u| -u.clicks.size }[0...5].each do |u| 

或者你可以让数据库为您做了排序:

@users = Users.joins(:clicks).order("clicks.size DESC").limit(5)