3

如果你用“序列化”标记一个字段,还有没有办法直接更新该字段,而不通过序列化代码运行?我有我想要的序列化形式,我不希望它重新序列化。

用例是我正在编写一个迁移以从数据列的 YAML 序列化移动到 JSON。我已经重写了序列化方法来进行 JSON 序列化而不是 YAML。在我的向下迁移中,我需要从 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 回答