あきろぐ

いろいろめもするよ🐈🐈🐈

【Rails】カラムの中身を別のカラムにコピーする3パターン

1つ目

あるテーブルに新しくカラムを追加し、既存のカラムデータを新規カラムにコピーする

ModelName.update_all(new_column = old_column)

2つ目

テーブルサイズが大きい場合、レコードを分割して処理を実行することも可能

ModelName.in_batches(of: 10000) do | model_name|
  model_name.update_all(new_column = old_column)
  sleep 1
end

railsdoc.com

3つ目

既存の複数カラムデータをconcatして新規カラムにコピーする

ModelName.update_all('new_column = CONCAT(IFNULL(old_column1, ""), IFNULL((old_column2, ""))')

コピー元のカラムにnullが含まれている場合、CONCATされないのでIFNULLで回避する必要がある。