【Rails】マイグレーションファイルの記載内容がテーブルに反映されない件

はやくコロナウイルスが収束してほしいですね。

はやく飲みに行ったりライブいったりしたい!!



今日はマイグレーションのところで自分がハマった箇所の紹介をします。



まず、下のコードを見てください。

マイグレーションファイル1】

def change
    create_table :categories do |t|
      t.integer :category
      t.timestamps
    end
 end

マイグレーションファイル2】

def change
    # categoriesテーブルのカラム名変更(category→name)
    rename_column :categories, :category, :name
  end
  
  def up
    # categoriesテーブル中のnameカラムのデータ型をtextに変更
    change_column :categories, :name, :text
  end


まずマイグレーションファイル1でcategoriesテーブルを作成し、その後、カラム名と型を変更したくてマイグレーションファイル2を作成しています。
一見これでなんの問題もなくカラム名と型が変更できるように思います。


しかし、マイグレーションをしてもカラム名は変更できているのに型が変更しないという現象が起き、頭を悩ませました。
なぜこのような現象が起きたのか・・・


結論からいいますと、マイグレーションファイルは上から実行されるのではなく一度に実行されるため、
change_columnメソッドではnameカラムなんてないぞとなっていたということでした。


なので、もう一つマイグレーションファイルを作り、マイグレーションファイル2の中身を分割することで、無事型を変更することができました。


マイグレーションファイル2】

 def change
    # categoriesテーブルのカラム名変更(category→name)
    rename_column :categories, :category, :name
  end

マイグレーションファイル3】

  def up
    # categoriesテーブル中のnameカラムのデータ型をtextに変更
    change_column :categories, :name, :text
  end

f:id:shun_0211:20200419113947p:plain



これを解決できたとき、なんでマイグレーションファイル内のメソッドだけ一緒に走らせるんだとめっちゃ思いましたw



以上、「マイグレーションファイルの記載内容がテーブルに反映されない件」についての記事でした。

お役に立ったという方はいいねを、なんかここ違うぞという方はコメント頂けるとうれしいです!

ここまで読んでいただきありがとうございました。では!