如果你用“序列化”标记一个字段,还有没有办法直接更新该字段,而不通过序列化代码运行?我有我想要的序列化形式,我不希望它重新序列化。
用例是我正在编写一个迁移以从数据列的 YAML 序列化移动到 JSON。我已经重写了序列化方法来进行 JSON 序列化而不是 YAML。在我的向下迁移中,我需要从 JSON 返回到 YAML,并且我不希望 YAML 重新序列化为 JSON。
如果你用“序列化”标记一个字段,还有没有办法直接更新该字段,而不通过序列化代码运行?我有我想要的序列化形式,我不希望它重新序列化。
用例是我正在编写一个迁移以从数据列的 YAML 序列化移动到 JSON。我已经重写了序列化方法来进行 JSON 序列化而不是 YAML。在我的向下迁移中,我需要从 JSON 返回到 YAML,并且我不希望 YAML 重新序列化为 JSON。
是的,您可以通过创建自己的 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
.