rails g migration ChangeSampleNameNotNullでNotNull制約を追加するファイルを作成しました。
class ChangeSampleNameNotNull < ActiveRecord::Migration[5.2]
def change
change_column_null :Sample, :name, false
end
end
追加したファイルの中身を編集しrails db:migrateしようとするとエラー
#エラーの原因?
前に行ったコマンドのmigrationで何らかの手違いがあると思います。おそらく、migration処理の途中からエラーが起きていて、テーブルは生成されているが、テーブルを生成したmigrationは未実行のまま。といった状態なのかな?と思います
#解決法
$rails db:migrate:reset
リセットする前に「これリセットする必要あるかな?なんか違う方法ないか???」と考えた結果まずは、dbのステータスを見てみようと思い↓実行してみました
$rails db:migrate:status
どうやら、一番下のマイグレーションファイルが怪しい。。。
エディタを確認したところ
同じマイグレーションファイルを二回作成していました。。
なので、一番下のマイグレーションファイルを削除してみます。
※downの状態だったら、手動でファイルを削除しても問題ない
Status Migration ID Migration Name
--------------------------------------------------
up 20210323042143 Create posts
down 20210323042144 Change sample text not null
↓のコマンドで削除
rm db/migrate/20210323123633_change_sample_text_not_null.rb
これで問題なくマイグレートできる??
あ〜〜またエラーダァ!!!
NoMethodError: undefined method `null=' for nil:NilClassと出てきたけど余裕だった
change_column_null テーブル名 カラム名 false のカラム名を間違えただけだった。しっかり確認しよう。
#最後に
いや〜沼った沼った…これからはこうゆうことがなるべく起こらない様に気をつけなきゃな〜。
#補足
ActiveRecord::UnknownMigrationVersionErrorが出た時はこの方の参照
https://qiita.com/shellingford/items/d244c4bd61b2724f713e
rails:db:rollbackとbundle exec rake db:migrate:down VERSION=
Status Migration ID Migration Name
--------------------------------------------------
up 20210323042143 Create posts
up 20210323042144 Change sample text not null
up 20210323042142 ~~~~~~~~~~~sample2
上から2つ目の奴をupからdownにさせたい…こうゆう時はbundle exec rake db:migrate:down VERSION=
(要は複数マイグレーションファイルがある場合。)
https://qiita.com/usizou/items/6dcdea46ec0b4a89c661