2

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

4

0 回答 0