migrationの「change」「up」「down」について
この記事で、Artticlesのデータベースからcontentカラムを取り除いた
その際、rollbackしたときのことも踏まえてコードを書いたので、詳しく振り返る
以下のように:textが書いてあるとrollbackしたときに逆の動作(remove⇔add)ができる
class RemoveContentFromArticles < ActiveRecord::Migration[6.0]
def change
remove_column :articles, :content, :text
end
end- removeは:textがなくても可能
- addは型の記載(:text)がないと失敗する
change
「rails db:migrate」でも「rails db:rollback」でも、両方で実行されるメソッド
changeと異なり、片方でしか実行されない
- up → migrationを実行したときに実行される
- down → rollbackを実行したときに実行される
class RemoveContentFromArticles < ActiveRecord::Migration[6.0]
def up
remove_column :articles, :content
end
def down
add_column :articles, :content, :text
end
end基本的には「change」を使う
- upとdownを使い分けてコードを書くことは少ない
- migrationとrollbackで逆の動作をするとき、changeだと複雑になる場合がある
- そういうケースではupとdowmを使い分けることがある

