LoginSignup
14
16

More than 3 years have passed since last update.

【Rails】DBをリセットしてmigrateをやり直す方法

Posted at

はじめに

Railsで作成したアプリで、一番はじめに作ったモデルのテーブルが間違っていたことに気づいたため、DBをリセットしてmigrateをやり直しました。
以下の記事を参考にやり直すことができました。
参考 Rails:migrateでDBをリセットして最初からつくり直す方法。
参考 【Rails】$rails db:rollbackしたい時の間違えない手順

何が間違っていたのか

deviseでユーザー登録をさせる時に、生年月日のカラム型をstring型にしてしまっていた。このままでも登録は出来たが、生年月日の欄を入力した状態で他の部分のバリデーションに引っ掛かり、エラー文を表示させる画面に移った時に以下の表記。

ターミナルに表示されたエラー
ActionView::Template::Error (undefined method `day' for "{1=>1932, 2=>nil, 3=>nil}":String):

ページを遷移した時に、フォームに入っていた情報がdata型では無かったのでおかしいことになってしまった様子。(string型だと、ハッシュにして、それぞれの番号を年月日に当てはめていた?)

解決策

db:reset

カラム型を変更すると、既に登録されている生年月日のデータがおかしくなるかなと思って、まずはテーブルのデータを削除しようと思い、以下の記事を見つけた。

①全てのレコードを空にしたい場合はrake db:resetを行う。
rake db:resetは全てのテーブルを dropし、"db/schema.rb"を元にテーブルの再作成を行います。

②"db/migrate/" 以下の全ての migration を実行してテーブルを再作成したい場合は、rake db:migrate:reset
全てのテーブルを dropし"db/migrate/"以下の全ての migration を実行してテーブルを再作成を行うため、こちらの方が効力が強いかと思料されます。

migrationファイルを編集して②やればOKだなと思ったけど、なんか怖かったのでとりあえず①でDBをリセットすると無事に無事に、DB内のデータは全て削除されていた。

データベースをリセット
% rails db:reset

Dropped database 'database名_development'
Dropped database 'database名_test'
Created database 'database名_development'
Created database 'database名_test'

rollback

続いて、カラム型を変更するためにmigrationファイルを修正した。
rails db:rollbackで良いのかなと思ってたけど、既にmigrationファイルが5つあったため、

指定箇所までrollbackする
% rails db:rollback STEP=(num)
# num個前のファイルまでrollbackできる

rollbackして、migrationファイルを修正して

migration
% rails db:migrate

一応確認すると無事に反映されていました。

ちゃんと反映されたかを確認
% rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200831104449  Devise create users
   up     20200902085108  Create items
   up     20200903070748  Create active storage tablesactive storage
   up     20200907074332  Create orders
   up     20200910081458  Create addresses

無事にカラム型も修正できてエラーも解決できました。

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16