【Rails】カラム追加して、既存のレコードに特定の条件を付けてそのカラムを埋めるメモ

bookseriesという本のシリーズを管理するテーブルがあります。

このテーブルは本の様々な情報を持つbookテーブルと紐付いています。

bookseriesに出版社名のカラムであるpublisherを追加します。

このカラムはbookにある出版社名のカラムと同じレコードを持たせたい。

そんなときに既存のレコードに反映させる方法です。

結論から言うとrunnerを使って条件を書いて読み込ませればOKです。

適当なディレクトリにrunnerする用のファイルを作ります。

lib/addcolumn/publisher_series.rb

Bookseries.all.each do |series|
  if series.publisher.nil?
    series.update(publisher: Book.find_by(series: series.title).publisherName)
  end
end

そこで対象のレコードを全て繰り返すeach文を作り、既存のレコードであるnilを判別する条件式の中に対象をupdateする式を書きます。

その後runner

rails runner lib/addcolumn/publisher_series.rb

実行完了のメッセージが表示されたらrails cなどでレコードを確認してみるとできていると思います。