2017-01-06 6 views
0

と、データベース内の文字列を既存のシリアライズシリアル化されて保存されます。その属性を呼び出すと、Railsはそれを正しくハッシュに変換します。データベース内は私はハッシュとしてシリアル化するためにはActiveRecordを使用しmysqlデータベース内のテキストフィールドを持っているのActiveRecord

フィールドには、次のようになります。

mail_validation: --- 
:metadata: 
    :county_name: Bucks 

をしかし、私は明らかにシリアライズされていないデータベース内の既存のレコードを持っています。それは次のようになります。私はそのレコードのmail_validation属性を起動しようとすると

mail_validation: { deliverable: "N", plus4_of_zip: "1335", process_flag: "P", delivery_point: "20", cass_date: "2014-11-04" } 

、それは文字列ではなくハッシュとして結果を返します。 (その属性の文字列を返すレコードは、従来のデータベースからインポートされました)。

その属性を呼び出すと、すべてのレコードがハッシュを返すようにするにはどうすればよいですか?

+0

"レガシー" の記録を書きましたか?生のJavaScript(JSONへの壊れた試み)のように見えます。とにかく、データを読み込み、Rubyのハッシュに解析し、YAMLに変換し、 'Record'クラスを使わずにすべて書き戻すという難しい方法でやっていると思います。 –

答えて

0

を実行し、このスクリプト:

records = Record.where("mail_validation NOT LIKE '---%'") # all string values 
records.each do |record| 
    # remove braces 
    mail_validation = record.mail_validation.gsub(/(\{ | \})/, '') 
    # split on key-value pairs 
    mail_validation = mail_validation.split(', ') 
    # make hash 
    mail_validation = mail_validation.map { |pair| pair.split(': ') }.to_h 
    # hack to avoid ActiveRecord::SerializationTypeMismatch error 
    Record.where(id: record.id).update_all(mail_validation: mail_validation) 
end 
関連する問題