2009-10-15 57 views
3

我有欄「身份證」,「RESOURCE_ID」,「read_time」,「值」,其中「價值」是一個浮動的表Ruby on Rails的:基於其他列的數據和表格的列行值

什麼我試圖完成的是返回一個記錄列表,使得每個記錄的'值'是特定'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 

謝謝。

回答

5

ActiveRecord ::計算是你的朋友在這裏。讓你用一個數據庫調用來完成你想要的。它使用組中使用的列中的唯一值作爲關鍵字返回一個散列。

下面是您編寫的代碼,重寫爲使用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 
+0

令人驚歎!非常感謝你。我不知道:group選項存在。 – Evan