マイグレーションファイルを間違えて作り、慌てて手動で削除してしまいその後rails db:migrateするとエラーが出てしまいました。そのときに出てきたのがNO FILEです。
###削除方法
①マイグレーションファイルの確認
$ rails db:migration:statusで現状の確認とマイグレーションファイルのIDを調べる。
$ rails db:migration:status
Status Migration ID Migration Name
--------------------------------------------------
up 20200518132414 Devise create users
up 20200521083405 Add name to users
up 20200525013751 Create posts
up 20200527010431 Add picture to posts
up 20200528232616 ********** NO FILE **********
up 20200531083300 Create comments
NO FILEとなっているIDは20200528232616と確認
②ダミーのファイル作成
あとでファイルは消してしまうのでhogeの部分はなんでも大丈夫です。
touch db/migrate/20200528232616_hoge.rb
20200528232616_hoge.rb
class Hoge < ActiveRecord::Migrattion[5.3] #5.3の部分はrailsのバージョンに合わせてください
def change
end
end
③マイグレーションファイルを削除
現状の確認
$ rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20200518132414 Devise create users
up 20200521083405 Add name to users
up 20200525013751 Create posts
up 20200527010431 Add picture to posts
up 20200528232616 Hoge
up 20200531083300 Create comments
現状はこのようにMigration Nameがちゃんとついている状態になっています。
ここからマイグレーションファイルをupからdownの状態にします。
$ rails db:migration:down VERSION=2020052823261
$ rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20200518132414 Devise create users
up 20200521083405 Add name to users
up 20200525013751 Create posts
up 20200527010431 Add picture to posts
down 20200528232616 Hoge
up 20200531083300 Create comments
downの状態になったことを確認したあと、削除します。
$ rm db/migrate/db/migrate/20200528232616_hoge.rb
再度確認してみると、
$ rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20200518132414 Devise create users
up 20200521083405 Add name to users
up 20200525013751 Create posts
up 20200527010431 Add picture to posts
up 20200531083300 Create comments
ちゃんと消えているはずです!!
###まとめ
まずはマイグレーションファイルを間違えて作ってしまっても、慌ててupの状態で削除をしないことが大切です。