我通过this site上的upvotes对API进行排名。
我计算每个页面加载的分数。这是昂贵且缓慢的并且页面加载花费约5秒。
有更有效的方法吗?每次创建新帖子时,是否需要使用后台作业重新排除所有内容?每次提交投票以及每次帖子变老一小时后,情况如何?
这似乎是在排名依赖于时间+投票的任何网站上的常见问题。
答案 0 :(得分:0)
如果您可以提供有关您的模型和排名系统的一些信息,我可以改进这个答案,但这是我的建议,基于您迄今为止提供的信息:
在AR模型上创建一个名为count
的列。
创建新的Api对象时,将count
列设置为0
。当它被投票时,请执行以下操作:
def upvote
@api = Api.find_by_id(params[:id])
new_count = @api.count + 1
@api.update_attributes(:count => new_count)
end
你可以为downvotes做相反的事。
然后在你的视图中,只需在循环中执行此操作:
<% @apis.each do |api| %>
<%= api.count %>
<% end %>
这将停止计算页面加载,并只从数据库中提取一个值。希望这对网站有帮助,并且很酷。如果你想使用我迄今为止非常喜欢的宝石,Thumbs Up是个不错的选择。