Ruby on rails 对db列中的哈希值求和,并将结果放入另一列中
我有一个名为google_records的表,其中每一行都是当天google adwords帐户的快照 以下是模式-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",
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