3

serialize1 つのActiveRecordモデルで使用してArray、単純なハッシュをテキスト データベース フィールドにシリアル化します。Array2 番目のパラメーターを使用して、逆シリアル化をsに強制します。

class Shop < ActiveRecord::Base
  serialize : recipients, Array
end

正常に動作しているように見えますが、いくつかのリクエストの後、の内容が配列ではなくハッシュにrecipients変わります。HashOfIndifferentAccessこれは、モデルを数回リロードした後にのみ発生し、テストやコンソールでは再現できず、本番環境でのみ再現できました。

4

2 に答える 2

2

Rails 3.1 アプリの 1 つのシリアル化されたフィールドで同じ問題が発生しました。多くのトラブルシューティングを行った後、文字エンコードの問題に絞り込みました。実稼働環境は Postgres でしたが、SQLite を使用していたため、ローカルで再現できませんでした。

some_field.force_encoding(Encoding::UTF_8)シリアル化される前にすべての値に適用してみて、何が起こるかを確認してください。

于 2012-09-19T18:56:05.130 に答える
1

これは、十分なテストを行ってローカルで再現できるはずです。本番データベースとログを調べて、ローカル テストで同じデータを使用してみてください。

hashwithindifferentaccess はコントローラーから取得されます。おそらく、コントローラーからデータを直接取得していて、まったく処理していない可能性があります。

ページ、コントローラー、およびモデル保存コードの要点を作成し、この質問を更新します。ハッシュのネストの深さに応じて、保存する前に HWIA ハッシュを通常のハッシュに変換できます。

デバッグと解決が難しくないはずです。

于 2012-09-13T15:19:36.923 に答える