我有以下代码来获取结果,按日期对它们进行分组并为该日期创建客户计数,然后将其插入到Calculation
表中:
customers.group_by { |c| Date.parse c.created.to_s }.map do |date, v|
value = v.map {|h1| 1}.sum
Calculation.find_or_initialize_by(
account_id: a.id,
metric: 'active_customers',
occurred_on: date
).update(
value: value
)
end
如果有数百个日期,则必须运行find_or_initialize_by
...数百次。
我喜欢做的是以某种方式避免做数百个“发现”和“创建”,并以某种方式拉动几个数据库调用。
原因是我遇到了多个数据库连接的问题,同时发生了很多发现/插入(这些代码通过后台作业同时运行)。
我正在使用Rails 4和Postgres 9.3.1。