更新序列化字段而不进行序列化

时间:2013-06-12 21:03:04

标签: ruby-on-rails

如果使用“serialize”标记字段,是否还有一种方法可以直接更新字段,而无需通过序列化代码运行?我有我想要的序列化表单,我不希望它重新序列化。

这样的用例是我正在编写一个迁移,以便从数据列的YAML序列化转移到JSON。我已经重写了serialize方法来执行JSON序列化而不是YAML。在我的向下迁移中,我需要从JSON返回到YAML,我不希望YAML重新序列化为JSON。

1 个答案:

答案 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