Logs

来世はねこです

$ rails g migration を間違えたときのこと

既存のデータベースにカラムを加えてみようとして、コマンドを間違えました。

せっかくなので、調べたことをまとめておきます。

やってしまったこと

Railsの教科書」(以下、「教科書」)を【大名エンジニアカレッジ】にて学習中です。

第7章で既存のbooksモデルに画像を格納するカラムを追加しようとして、コマンドを間違えました。

コマンドの基本形は

$ rails g migration Addカラム名Toテーブル名 カラム名:型名

なので

正しくは、$ rails g migration AddPictureToBooks picture:string を

$ rails g migration Add picuture To books picuture:strings に。

Add picuture To books

スペースがない!単語のはじまり部は大文字!ちゃんと見ようよ〜。

訂正のやり方

なぜ気が付いたか?

「教科書」と照らし合わせながら、学習成果で読めるようになったターミナルを眺めて喜んでいた。リンク先のmigrationファイルに簡単にアクセスできるので、そちらも眺めていたところ、「教科書」の実行結果と著しく異なるので、「あれ?」となった。

考えたこと

まだ、rails db:migrate 前だったので、簡単なのではないか?migrationファイルを削除するだけでいいのでは?とも思ったが、これまでRailsにおいて、そういう安易な判断でチャチャっとやってしまって大変だった経験が多々あったことを思い出し、調べてからにすることに。

今、DBの反映に関してどの段階にいるかで対応法が異なる。

  1. rails db:migrate 前
  2. rails db:migrate 直後
  3. rails db:migrate 後、複数前に遡って操作したい

railsのmigration状態を確認するためのコマンド

rails db:migrate:status

books_app % rails db:migrate:status

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201101100648  Create books
   up     20201108040635  Add author to books
  down    20201128082637  Addpicuture tobooks

このアプリに関しての履歴全部があるみたい。

テーブルにバージョンがあればupなければdown。

先ほどに当てはめると、、、

  1. rails db:migrate 前 down
  2. rails db:migrate 直後 up
  3. rails db:migrate 後、複数前に遡って操作したい up

downはmigrationファイルを削除するだけ。

せっかくなので復習を兼ねてコマンドラインから

rm  db/migrate/20201128082637_addpicuture_tobooks.rb

  ⬇️

books_app % ls ./db/migrate
20201101100648_create_books.rb          20201108040635_add_author_to_books.rb

こちらでも確認できる。

books_app % rails db:migrate:status                             

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201101100648  Create books
   up     20201108040635  Add author to books

【参考】upはさらにそこから分岐

1. 直前の反映分

1つ前の状態に戻すコマンド rails db:rollback 

Statusがdownになるので、そのファイルを削除

2. 複数前の反映分

ID指定でdownして、migrationファイルを削除

rails db:migrate:down VERSION=downさせたいMigration ID

Statusがdownになるので、そのファイルを削除

ふ〜ん!!面白い、すごい!

【参考】分は、試したくないので結果を表示できず、ごめんなさい。

《今日の仮説》

今の状態やこれまでのことはどこしらに残っているので(log?)、その見方・活用法の引き出しが増えていくと、レベルアップを感じられるようになるのでは。

こういう機会にRailsガイドに行ってみる習慣を。

railsguides.jp

参考にさせていただいたページ

qiita.com

qiita.com