【发布时间】:2010-12-31 20:18:29
【问题描述】:
用户on my site 为说唱歌词创建注释 (example)。我想创建一个排行榜来奖励创建注释最多的人。
排行榜应该跟踪每个用户总共创建了多少注释,以及他在过去一周、一天等中创建了多少。
我在实现整体排行榜时没有问题:
@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>
实施每日/每周记分牌的最佳方式是什么?
【问题讨论】: