如果使用“serialize”标记字段,是否还有一种方法可以直接更新字段,而无需通过序列化代码运行?我有我想要的序列化表单,我不希望它重新序列化。
这样的用例是我正在编写一个迁移,以便从数据列的YAML序列化转移到JSON。我已经重写了serialize方法来执行JSON序列化而不是YAML。在我的向下迁移中,我需要从JSON返回到YAML,我不希望YAML重新序列化为JSON。
答案 0 :(得分:1)
是的,您可以通过创建自己的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
。