Ruby on rails Rails 3:如何找到得分最高的用户?

Ruby on rails Rails 3:如何找到得分最高的用户?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在潜入Rails,学习如何使用ActiveRecord,并创建了一个具有分数属性的播放器模型。我试图找出一种有效的方法来查询DB中得分最高的玩家。如果两个或两个以上的球员打成平局,我需要所有的球员。我可以先对列表进行排序,但我不确定这是否必要。检索一组得分最高的玩家最有效的方法是什么 另外,在DB中为score列创建索引是否会提高此查询的速度 非常感谢你的智慧 Player.order(“score DESC”).limit(50) 应该就这么简单。看一看这张照片 或者更好的做法是,这样做:

我正在潜入Rails,学习如何使用ActiveRecord,并创建了一个具有分数属性的播放器模型。我试图找出一种有效的方法来查询DB中得分最高的玩家。如果两个或两个以上的球员打成平局,我需要所有的球员。我可以先对列表进行排序,但我不确定这是否必要。检索一组得分最高的玩家最有效的方法是什么

另外,在DB中为score列创建索引是否会提高此查询的速度

非常感谢你的智慧

Player.order(“score DESC”).limit(50)

应该就这么简单。看一看这张照片

或者更好的做法是,这样做:

high_score = Player.maximum(:score)
high_score_players = Player.where(:score => high_score).all

如果您要作为
WHERE
ORDER BY
的一部分查询列,您几乎应该总是有一个索引。如果没有索引,您的数据库必须进行表扫描,而且每一项都很昂贵

捕获得分最高的一名或多名球员可以通过两次传球操作完成,首先确定得分最高的球员,其次获取所有得分最高的球员:

@players = Player.where("score=(SELECT MAX(score) FROM #{Player.table_name}").all

我认为最后一行应该是
high\u score\u players=Player。按分数查找所有玩家(high\u score)
(注意查找所有玩家…),因为可能有多个玩家的分数很高。@Alex-很好,我更新了它,改为使用
where
方法。我从来没有使用过
find\u all\u by…
这种查询非常特定于数据库,Rails的全部目的是消除键入SQL的需要。虽然您的查询可能是有效的,但它不是非常“rails-esque”,AREL在生成查询方面要好得多,但如果您知道正在使用的RDBMS,它仍然不如您自己做的那么好。您的方法更通用,但需要两个查询,并且需要稍长的时间。不过,如果每次渲染只调用一次,那也没什么大不了的,而且更不依赖于平台,这不是一件坏事。