Rails更新海量数据

时间:2017-06-30 08:06:11

标签: ruby-on-rails ruby activerecord

我有一个模型调用view()->withBar('Foo'); ,它包含每日数据

它有以下专栏。

DataIndicator

它有很多数据,但现在我需要改变一些数据。

如何按日期大量更新其值?

EX:

原文

:id => :integer,
:date => :datetime,
:dau => :integer,
:login_count => :integer

现在我有一个哈希值,可以参考修改原始数据。

喜欢这个

{ "id" => 1, "date" => 2017-01-01 00:00:00 UTC, "dau" => 5 , "login_count" => 150 }, 
{ "id" => 2, "date" => 2017-01-02 00:00:00 UTC, "dau" => 5 , "login_count" => 140 },
{ "id" => 3, "date" => 2017-01-03 00:00:00 UTC, "dau" => 5 , "login_count" => 300 }

如您所见,update_date = { "2017-01-01" => { "dau" => 5, "login_count" => 5, }, "2017-01-02" => {}, "2017-01-03" => { "dau" => 5, }, ... } 将不包含所有属性,它可能只有一个甚至零个新数据。 更新此值的最佳方法是什么?

我只能想到那个坏人。

喜欢这个

update_date

2 个答案:

答案 0 :(得分:0)

我想我误解了你的问题。 如果您只选择所有DataIndicator记录,然后检查哈希是否包含数据,那会不会更容易?

DataIndicator.all.each do |di|
  date =  di.date.strftime("%Y-%m-%d")
  to_update = update_date[date]
  next if to_update.blank?
  to_update.each do |field,value|
    di.send("#{field}=".to_sym, value)
  end
  di.save!
end

答案 1 :(得分:0)

这对我有用。
对于Rails 4 +

DataIndicator.where(["date(date) = ?"], "2017-01-01").update_all(dau: 5, login_count: 5)