我正在制作一个小应用程序,其中包含排行榜概念。基本上,该模型只是一个player_name 和一个current_score。
我想做的是获取特定玩家的排名,并且考虑到新的分数一直在出现,它需要是动态的。显然,我可以使用 order by 子句进行正常查找,然后我必须循环遍历每个记录。当我有 100,000 行时,效率不是很高。
关于我应该采取什么方法有什么建议吗?
这是表的迁移:
class CreateScores < ActiveRecord::Migration
def self.up
create_table :scores do |t|
t.string :player_name
t.integer :current_score
t.timestamps
end
end
def self.down
drop_table :scores
end
end
编辑
作为示例,我有以下内容:
Score.select('player_name, current_score').limit(20)
=> [#<Score player_name: "Keith Hughes", current_score: 9>, #<Score player_name: "Diane Chapman", current_score: 8>, #<Score player_name: "Helen Dixon", current_score: 4>, #<Score player_name: "Donald Lynch", current_score: 9>, #<Score player_name: "Shawn Snyder", current_score: 2>, #<Score player_name: "Nancy Palmer", current_score: 9>, #<Score player_name: "Janet Arnold", current_score: 1>, #<Score player_name: "Sharon Torres", current_score: 9>, #<Score player_name: "Keith Ortiz", current_score: 5>, #<Score player_name: "Judith Day", current_score: 3>, #<Score player_name: "Gregory Watson", current_score: 7>, #<Score player_name: "Jeremy Welch", current_score: 3>, #<Score player_name: "Sharon Oliver", current_score: 7>, #<Score player_name: "Donald Lewis", current_score: 7>, #<Score player_name: "Timothy Frazier", current_score: 7>, #<Score player_name: "John Richards", current_score: 1>, #<Score player_name: "Carolyn White", current_score: 4>, #<Score player_name: "Ronald Smith", current_score: 2>, #<Score player_name: "Emily Freeman", current_score: 9>, #<Score player_name: "Gregory Wright", current_score: 2>]
我怎样才能计算出“唐纳德·刘易斯”的排名?