我想说我想在我的users
表格中添加一列,运行以下迁移
class AddVersionHistoryToUsers < ActiveRecord::Migration
def change
add_column :users, :versions, :string, array: true, default: '{}'
User.find_each do |user|
if user.app_version?
user.versions << user.app_version.to_s
user.save!
end
end
end
end
我的目标是将每个用户的当前app_version
插入versions
数组。由于默认值,我怎样才能在users表中没有锁定的情况下执行迁移?
答案 0 :(得分:2)
要打包它:为每个User
循环和查询数据库高度效率低下。您应该使用update_all执行这些任务。
由于您的数据已存在于同一个表中,因此您可以从那里获取数据。
User.where.not(app_version: nil).update_all('versions = ARRAY[app_version]')