今回やりたかったこと
usersテーブルとtasksテーブルを1:多でテーブルの紐付けを行った後にusersテーブルにaddressをいうカラムを追加しようと思って直接マイグレーションファイルにカラム名とデータ型を入力して、rails db:migrate:redoを実行しようとしたらエラーが出た。
ではなぜ、エラーが出たのか?
rails db:migrate:redoは見えていないだけで実は、一度ファイルをdownをにして、その後にupをしている。
そのため、紐付けたテーブル同士の依存関係があるアソシエーションでは、片方のマイグレーションファイルをredoでを使って編集しようとした場合、片方だけがdownになってしまうので、もう片方のテーブルとの整合性が取れなくなることから、それを阻止するためにrailsがエラーを出す
ではどうやってカラムの編集を行うのか
結論、新しくマイグレーションファイルを生成し、変更したいカラムを追加・削除・変更する。
こうすることによって、既存のマイグレーションファイルをdownにしなくても良いため、エラーは起こらない。
もしくは、整合性の観点から紐付けたテーブルのマイグレーションファイル両方をdownする。その後、マイグレーションファイルを編集して、rails db:migrateで両方をupする方法もあるらしいが、個人的には新たにマイグレーションファイルを生成した方がやりやすいため、今後はそっちを使っていこうと思う。