3

フィールドを「シリアル化」でマークした場合、シリアル化コードを実行せずにフィールドを直接更新する方法はありますか? 必要なシリアル化フォームがあり、再シリアル化したくありません。

これの使用例は、データ列の YAML シリアル化から JSON に移行するための移行を書いていることです。YAML の代わりに JSON シリアル化を行うために serialize メソッドをオーバーライドしました。ダウン マイグレーションでは、JSON から YAML に戻す必要があり、YAML を JSON として再シリアル化したくありません。

4

1 に答える 1

2

はい、独自の SQL 更新クエリを作成することでこれを行うことができます。これを行う簡単な方法は、 を使用することですupdate_all

たとえばBall、シリアル化された属性を持つというモデルがある場合colors:

Ball.where(id: ball_id).update_all colors: "arbitrary string"

これにより、次のクエリが生成されます。

UPDATE "balls" SET "colors" = 'arbitrary string' WHERE "balls"."id" = 123

これはモデルをインスタンス化しないため、検証やフィルターなどをバイパスするので注意してください。これは を呼び出すことと同じActiveRecord::Base.connection.sendです。

于 2013-06-12T21:29:28.630 に答える