在 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 推送,因为活动记录不支持我需要的速度。