私のサイトのユーザーは、ラップの歌詞の注釈を作成します (例)。最も多くの注釈を作成した人に報酬を与えるリーダーボードを作成したいと考えています。
リーダーボードでは、各ユーザーが全体で作成した注釈の数と、過去 1 週間、1 日などに作成した注釈の数を追跡する必要があります。
全体的なリーダーボードの実装に問題はありません:
@users = User.all
<table>
<tr>
<th>Contributor</th>
<th>Annotations</th>
</tr>
<% @users.sort_by{|u| u.annotations.size }.reverse.each do |u| %>
<tr>
<td><%= u %></td>
<td><%= u.annotations.size %></td>
</tr>
<% end %>
</table>
しかし、毎日のスコアボードを (たとえば) 実装しようとすると、コードが繰り返され、操作が非常に遅くなります (データベースの並べ替え/カウントに依存するのではなく、メモリ内のすべての注釈を反復処理する必要があるため)。
<table>
<tr>
<th>Contributor</th>
<th>Annotations</th>
</tr>
<% @users.sort_by{|u| u.annotations.select{|a| a.created_at > 1.day.ago }.size }.reverse.each do |u| %>
<tr>
<td><%= u %></td>
<td><%= u.annotations.select{|a| a.created_at > 1.day.ago }.size %></td>
</tr>
<% end %>
</table>
毎日/毎週のスコアボードを実装する最良の方法は何ですか?