0

私たちのアプリにはテキストフィールド:scheduleがあります。

もともと、データを文字列として保存していました。

モデルをに変更しましたserialize :schedule, Hash

レガシーデータを修正するには、古い(文字列)データをnilに置き換えるだけです。

ただし、シリアル化を追加した後、フィールド(文字列がある場合)に何か(nilまたは置換ハッシュ)を書き込もうとすると、例外がスローされます。

ActiveRecord::SerializationTypeMismatch: schedule was supposed to be a Hash, but was a String

シリアル化例外をオーバーライドして、フィールドを強制的にnilまたは置換ハッシュにする方法はありますか?

おそらく、SQLを介してフィールドを更新することにより、シリアル化をバイパスする方法がありますか?

(移行を使用して列を削除してから再度追加できることはわかっていますが、レーキタスクでこれを行う方法を探しています。)

4

1 に答える 1

1

update_columnデータベース内のすべてのレコードをすばやく更新する方法をご覧ください。UPDATE table SET schedule = NULLこれにより、検証やコールバックを考慮せずに、データベースに単純なものが送信されます。もちろん、この列のすべてのデータを失うことになりますが、私があなたの説明を理解している限り、それは問題ではありませんよね?

于 2013-01-08T19:29:01.083 に答える