Eva*_*van 3 activerecord ruby-on-rails
我有一个列'id','resource_id','read_time','value'的表,其中'value'是一个浮点数
我想要完成的是返回一个记录列表,使每条记录的"值"是特定"read_time"但具有不同"resource_id"值的所有记录的总和.
我想知道是否有一种聪明的方法(即不循环遍历所有条目)来实现这一目标.目前我正在实现这些方面:
@aggregate_meters = []
@res_one_meters = Meter.find(:all, :conditions => ["resource_id = ?", 1])
@res_one_meters.each do |meter|
read_time = meter.read_time
value = meter.value
if res_two_meter = Meter.find(:first, :conditions => ["resource_id = ? AND read_time = ?", 2, read_time ])
value = value + res_two_meter.value
end
aggregate_meter = Meter.new(:read_time => read_time, :value => value, :resource_id => 3)
@aggregate_meters.push(aggregate_meter)
end
Run Code Online (Sandbox Code Playgroud)
谢谢.
ActiveRecord :: Calculate是你的朋友.让您通过一次数据库调用完成所需的操作.它使用组中使用的列中的唯一值作为键返回哈希值.
这是您编写的代码,重写为使用sum.
values = Meter.sum(:value, :group => :read_time)
values.each do |read_time, value|
aggregate_meter = Meter.new(:read_time => read_time, :value => value, :resource_id => 3)
@aggregates_meter.push(aggregate_meter)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7236 次 |
| 最近记录: |