業務ではじめてマイグレーションファイルを作成しました。
行ったこと
①新規モデル作成
②新しく作成したモデルに、既存のテーブルからデータをインサート
①新規モデル作成
実行したいコンテナの中に入り
まず新しくモデルを作成しました
例)
ここでは
AfterHogesモデルを作成し
BeforeHogesモデルから
2023/01/01以降のデータをインサートしたい場合
と仮定して処理を進めます。
この場合、まずはAfterHogesモデルを作成します。
rails g model AfterHoges
とコマンドを打ちAfterHoges モデルを作成します。
その後、マイグレーションファイルの配下に新規でファイルを作成し
その中に各カラムの情報をファイルに記述します。
参考)☟このように
class AfterHoges < ActiveRecord::Migration[5.2]
def change
create_table :after_hoges do |t|
t.references :hoge, foreign_key: true, null: false
t.string :name, null: false
t.timestamps
end
end
end
ファイルに記述がおわったら、下記コマンド
rails db:migrate
を実行すると、①の完了です。
新しくAfterHogesモデルが作成できました。
しかし、まだデータがはいっていません。
なので、②にいきます。
②新しく作成したモデルに、既存のテーブルからデータをインサート
先ほど作成した
AfterHoges モデル に BeforeHogesモデル
からdateが 2023/01/01 以降のデータを入れていきます。
*あくまで例です
# 既存のBeforeHogesモデルからデータを取得
before_hoges_data = BeforeHoges.where("date > ?", Date.new(2023, 1, 1))
# AfterHogesモデルにデータをいれる
before_hoges_data.each do |before_hoge|
after_hoge = AfterHoge.create(
hoge = before_hoge.hoge
name = before_hoge.name
)
end
データが入れば②も完成です。
役にたったコマンド
rails db:migrate:status
マイグレファイルの状態を出してくれます。
up → マイグレーション成功
down → マイグレーション失敗
rails db:migrate:down VERSION="ここにマイグレ前に戻したいMigration IDをかく"
例えば
もう一度マイグレーション前の状態に戻したい
となった際に
上のコマンドで任意のマイグレーションファイルのみ
マイグレーション前の状態に戻すことができます。
Migration ID は
rails db:migrate:status
をうつと分かります。
参考記事