假设我有两个简单的模型
project
t.string :title
vote
t.references :project
t.integer :value
当我通过所有项目进行循环时,我还希望包括所有投票的总和,因为这样做
projects = Project.all
foreach project in projects
sum = project.votes.sum(:value)
...
并不是真的有效。
如果没有手动编写SQL,有没有办法做到这一点?像
这样的东西SELECT p.*, SUM(v.value)
FROM projects p
LEFT JOIN votes v
ON v.project_id = p.id
GROUP BY p.id
答案 0 :(得分:5)
如果频繁计算,你可能最好在项目记录中保留摘要统计(total_votes)。您可以更新每次投票,也可以通过cron作业进行更新。
我认为您正在寻找以下内容:
@totals = Vote.sum(:value,:group=>:project_id)
@projects = Project.find(:all)
然后
<%=h @project.title %> has <%= @totals[@project.id] %> votes.