LoginSignup
0
0

アソシエーションで紐付けられたテーブルの片方をrails db:migrate:redoを使って編集しようとしたらできなかった件について

Posted at

今回やりたかったこと

usersテーブルとtasksテーブルを1:多でテーブルの紐付けを行った後にusersテーブルにaddressをいうカラムを追加しようと思って直接マイグレーションファイルにカラム名とデータ型を入力して、rails db:migrate:redoを実行しようとしたらエラーが出た。

ではなぜ、エラーが出たのか?

rails db:migrate:redoは見えていないだけで実は、一度ファイルをdownをにして、その後にupをしている。
そのため、紐付けたテーブル同士の依存関係があるアソシエーションでは、片方のマイグレーションファイルをredoでを使って編集しようとした場合、片方だけがdownになってしまうので、もう片方のテーブルとの整合性が取れなくなることから、それを阻止するためにrailsがエラーを出す

ではどうやってカラムの編集を行うのか

結論、新しくマイグレーションファイルを生成し、変更したいカラムを追加・削除・変更する。
こうすることによって、既存のマイグレーションファイルをdownにしなくても良いため、エラーは起こらない。
もしくは、整合性の観点から紐付けたテーブルのマイグレーションファイル両方をdownする。その後、マイグレーションファイルを編集して、rails db:migrateで両方をupする方法もあるらしいが、個人的には新たにマイグレーションファイルを生成した方がやりやすいため、今後はそっちを使っていこうと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0