迁移以更改字段的默认值,并仅在具有旧的默认值时将所有现有记录的值更改为新的默认值.

n00*_*00b 29 mysql ruby-on-rails

我需要将字段的默认值从0更改为3,但是我已经拥有数千条记录,并希望这些记录仅在记录具有默认值0时将值从0更改为3,但是对于其他值,例如1,2,它应该保持不变.我该怎么做?

Dan*_*nne 74

在迁移中,您应该使用方法change_column来更改表设置,如下所示:

change_column :my_models, :attribute_name, :integer, :default => 3
Run Code Online (Sandbox Code Playgroud)

然后更新所有现有记录,而不是循环遍历所有记录并单独更新它们,您可以使用方法update_all,如下所示:

MyModel.update_all({ :attribute_name => 3 }, { :attribute_name => 0 })
Run Code Online (Sandbox Code Playgroud)

第一个参数告诉方法要设置什么值,第二个参数告诉它要更新哪些行的条件.

  • Rails 4中的update_all:Model.where("status = 0").update_all(status:2) (3认同)