【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
これを解決できたとき、なんでマイグレーションファイル内のメソッドだけ一緒に走らせるんだとめっちゃ思いましたw
以上、「マイグレーションファイルの記載内容がテーブルに反映されない件」についての記事でした。
お役に立ったという方はいいねを、なんかここ違うぞという方はコメント頂けるとうれしいです!
ここまで読んでいただきありがとうございました。では!