Ruby on rails 对db列中的哈希值求和,并将结果放入另一列中

Ruby on rails 对db列中的哈希值求和,并将结果放入另一列中,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个名为google_records的表,其中每一行都是当天google adwords帐户的快照 以下是模式- create_table "google_records", :force => true do |t| t.string "user_id" t.string "date" t.text "stats" t.text "account_name" t.datetime "created_at",

我有一个名为google_records的表,其中每一行都是当天google adwords帐户的快照

以下是模式-

create_table "google_records", :force => true do |t|
  t.string   "user_id"
  t.string   "date"
  t.text     "stats"
  t.text     "account_name"
  t.datetime "created_at",                                                        :null => false
  t.datetime "updated_at",                                                        :null => false
  t.decimal  "total_cost",        :precision => 12, :scale => 2, :default => 0.0, :null => false
  t.integer  "total_conversions",                                :default => 0,   :null => false
end

add_index "google_records", ["date"], :name => "index_google_records_on_date"
stats
包含按活动列出的当天统计数据的散列,条目如下所示:

:Carpet Cleaning:
 :conversions: 3
 :cost: 391.47
:Upholstery Cleaning:
 :conversions: 0
 :cost: 69.96
:Air Duct Cleaning:
 :conversions: 0
 :cost: 8.68
我刚刚添加了
total_cost
total_conversion
列,我想每天用每个值的总计更新这些列

我可以像这样在我的控制台中获得我想要的总数(总成本与我提供的样本不匹配,但这只是因为我缩短了样本以更好地拟合-总数是正确的)-

我希望以这种方式更新表中的所有记录,以获取转换和成本并保存它们,但当我尝试以下操作时:

GoogleRecord.all.each do |g|
  g.map {|m| m.stats}.map{ |s| s.map{ |key, value| value[:cost] || 0 } }.map {|m| m.inject(:+)}.compact.reduce(&:+)
end
我一直在获取Google记录的
NoMethodError:undefined方法映射:0x5f09868


似乎因为我只是在示例中抓取了一条有效的记录,所以我应该能够将代码应用到每个记录。

在示例代码中,where方法返回的内容类似于数组,所以map可以工作。但是在GoogleRecord.all.each块中,g是对db记录的引用。删除第一个映射调用,然后查看它是否有效

GoogleRecord.all.each do |g|
  g.stats.map{ |s| s.map{ |key, value| value[:cost] || 0 } }.map {|m| m.inject(:+)}.compact.reduce(&:+)
end

是的-今天处理的地图调用太多,无法看到它。谢谢
GoogleRecord.all.each do |g|
  g.stats.map{ |s| s.map{ |key, value| value[:cost] || 0 } }.map {|m| m.inject(:+)}.compact.reduce(&:+)
end