2017-06-30 10 views
1

I持ってDataIndicatorが、それは毎日のデータが含まれている1つのモデル呼び出し、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はすべての属性が含まれていませんが、それが可能新しいデータが1つだけ、あるいはゼロですらあります。 この値を更新する最も良い方法は何ですか?

私は悪いとしか考えられません。私はあなたの質問を読み違えると思うこの

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 
関連する問題