こんにちは、エンジニアのさもです
Railsをやっていると、マイグレーションを書いて、しょっちゅうDBを編集したり、テーブル追加したりしますよね。
Railsでは、
rake db:rollback
とすると、今実行されたマイグレーションの中で最新のものを巻き戻してくれます。
ですが、
スポンサーリンク
rake aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Unknown table 'myapp_development.users': DROP TABLE `users`
と表示されたことはないでしょうか?
これは、何らかの手違いで、テーブルが存在しないのに、テーブルを消そうとしたときに表示されるエラーです。
こんなときは、マイグレーションファイルを次のように修正すれば大丈夫です
- 修正前
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name, limit: 50 t.timestamps null: false t.datetime :deleted_at end end end
- 修正後
class CreateUsers < ActiveRecord::Migration def up create_table :users do |t| t.string :name, limit: 50 t.timestamps null: false t.datetime :deleted_at end end def down end end
メソッド名をchangeからupに変えて、空のdownメソッドを追加しました。
upとdownはセットで記述してください
このメソッドは何かというと、
です。
修正後、rake db:rollback
したら、マイグレーションファイルは戻しておいてください
普通、テーブルを変更するときはchangeメソッドですが、changeメソッドで定義された場合、以前の状態がわからないとロールバックできません。
以前の状態を記述しておくのがdownメソッドです。
カラム追加やテーブル追加など、以前の状態が明らかな場合はいいですが、カラム削除などの場合はup,downで書くようにしましょう。
読者登録をしていただけると、ブログを続ける励みになりますので、よろしくお願いします。