我有一个 6500 players
的数据库每个玩家平均有15场比赛results
.
用例
我想生成一个玩家列表,按 排序总和 他们的 奖品钱(结果表中的一个字段)。
我更喜欢将其置于某种范围内,因此我还可以过滤玩家所在国家/地区的列表等。
性能
我看过帖子提到 cache_counter
性能领域。就我而言 我有数千条结果记录 (75.000+) 所以我不希望每次有人访问生成的列表时都进行计算。
问题
解决这个问题的最佳模式是什么?我该如何实现?
型号
class Player < ActiveRecord::Base
has_many :results
end
class Result < ActiveRecord::Base
belongs_to :player
end
架构
create_table "players", :force => true do |t|
t.string "name"
t.string "nationality"
end
create_table "results", :force => true do |t|
t.integer "player_id"
t.date "event_date"
t.integer "place"
t.integer "prize"
end
更新
我想要完成的是达到可以使用的程度:
@players = Player.order_by_prize
和
@players = Player.filter_by_country('USA').order_by_prize('desc')
最佳答案
你应该能够使用这样的东西:
class Player
scope :order_by_prize, joins(:results).select('name, sum(results.prize) as total_prize').order('total_prize desc')
引用 rails api - active record querying详情。
关于ruby-on-rails-3 - 根据其关联模型的 SUM 对玩家进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526012/