2017-06-30 107 views
1

我有一個模型調用DataIndicator,它包含日常數據,Rails更新海量數據

並且它有以下列。

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

它有很多數據,但現在我需要改變它的一些。

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

EX:

原來

{ "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不會包含所有的屬性,它可能只有一個甚至零個新數據。 更新此值的最佳方法是什麼?

我只能認爲是壞的。

像這樣

update_date.each do |k, v| 
    data_by_date = DataIndicator.where(date: DateTime.parse(k)).first 
    next if data_by_date.nil? 
    data_by_date.update(v) 
end 
+0

這取決於'update_date'資料:什麼是大小,'多少相同的值dau'和'login_count' –

回答

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