0

私のサイトのユーザーは、フォロワーが投稿したリンクをクリックするたびにポイントを獲得します。今、私は全員のリストを表示することができます

@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

1 に答える 1

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)
于 2011-10-03T15:51:20.610 に答える