Railsでは、「サニタイズ」して直接SQL呼び出しでデータベースに挿入したハッシュがあります。
レコードを読み取るには、アクティブなレコードを使用する必要があります。ただし、そのフィールドにシリアライズ値が設定されていますが、フィールドを文字列として読み取っています。
データを挿入する方法は次のとおりです
def self.update_records(iFileName, iHashArray)
return false if(rows.size == 0)
return false if(killed?)
p "Pushing hash.size = #{rows.size}"
next_id = adjust_sequence( rows.size) #this reserves the record ids. explicit out paces the autosequence
records = iHashArray.each_with_index.map { |hash, index| "\r\n(#{next_id + index}, #{sanitize(hash)})" }
sql = wrapWithSQL(UPLOAD_ID, sanitize(iFileName), records.join(", "));
connection.execute(sql);
adjust_sequence(1);
return true
end
def self.wrapWithSQL(iUploadId, iFileName, iSql)
sql = "WITH new_values (id, hash_value) as ( values #{iSql} )"+
"\r\nINSERT INTO upload_stages (id, hash_value, upload_id, status,file_name, created_at, updated_at)"+
"\r\nSELECT id, hash_value, #{iUploadId}, 1, #{iFileName}, current_timestamp, current_timestamp FROM new_values returning id";
end
値を読み取るためのアクティブなレコード クラス
class UploadStage < ActiveRecord::Base
serialize :hash_value, Hash
#...
end
現在、私のWindowsボックスでは正常に動作しています。そして、過去数か月間、ハッシュが問題なく出力されるのを見てきました。
heroku ではデータベースから文字列として出力されますが、私のコードは、ハッシュが必要なときに文字列をどう処理するかを理解できません。
これに立ち向かう方法を知っている人はいますか?
注...生のSQLを使用してデータベースにプッシュするのは、一度に5000レコードをプッシュしているためです。SQL を変更することはできますが、アクティブ レコードは必要な速度をサポートしていないため、SQL でプッシュできる必要があります。