🍣
【Rails】マイグレーション up,downとchangeて結局何が違うのか。
前提知識
マイグレーションファイルはデータベースのバージョン管理をしてくれるものです。
1つのマイグレーションを適用することでデータベースのバージョンを1つあげることができ、適用済のマイグレーションを1つ取り消すことでバージョンを1つ下げることができます。
バージョンの上げ下げ(適用、適用を取り消す)について理解した上で記述します。
change
以下のマイグレーションファイルでは、changeというメソッドの中でusersテーブルを作成しています。
このファイルでは、changeメソッド内でバージョンをあげる時のコードだけが書かれているように見えますが、
こちらはバージョンを下げる処理も適切に行なってくれるようになります。
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end
つまりchangeはロールバック等をしたときに自動でバージョンの上げ下げを適用してくれます。
up・down
一方、up・downではメソッド名通り、バージョンのupかdownのどちらかしか処理を行ってくれません。
class ChangeUsersNickname < ActiveRecord::Migration[5.2]
def up
change_column :users, :name, :string, limit: 30
end
def down
change_column :users, :name, :string
end
end
まとめ
普段から何がなされているのか?を意識してないと、upだけ書かれたマイグレーションファイルを書いて、コードレビュー時に恥ずかしい思いをしますので、お気をつけください!
Discussion