【rails】migration「change」「up」「down」

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

migrationの「change」「up」「down」について

この記事で、Artticlesのデータベースからcontentカラムを取り除いた

その際、rollbackしたときのことも踏まえてコードを書いたので、詳しく振り返る


「change」

以下のように:textが書いてあるとrollbackしたときに逆の動作(removeadd)ができる

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」でも、両方で実行されるメソッド


「up」と「down」

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を使い分けることがある