我正在学习Rails并试图以正确的方式做到这一点,但我一直在努力寻找解决方案。
我的排名模型中有很多体育排名,我试图根据过滤器和应用于它的一般业务逻辑(即日期范围,运动等)进行操作。
排名模型
t.string "rank"
t.integer "team_id"
t.integer "sport_id"
t.integer "source_id"
团队模型
t.string "team"
t.integer "sport_id"
运动模特
t.string "sport"
例如,我想做的一件事就是找出这些年来每支球队的平均排名。我知道有一种方法可以做到这一点Ranking.average(:rank, :group => 'team_id')
,但这似乎不太干。
我的另一个想法是创建一个数组,哈希,json,甚至是一个临时表(可能不是一个好主意),以允许我更容易地应用计算和操作数据。
同样,我仍然有点绿,所以我可能会错过一个简单的解决方案,但最新的做法是什么?
答案 0 :(得分:1)
这似乎是开发人员不应该害怕下载到原始SQL的情况之一。查询界面很好,但有时你需要全功率。
SELECT team_id, AVG(rank)
FROM rankings
GROUP BY team_id
像这样使用:
team_ranks = ActiveRecord::Base.connection.execute(sql)
(免责声明:我对ActiveRecord不是很精通。我是一个mongodb家伙。也许这里有一个内置的方法)