0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【rails】db:migrateする前の状態に戻したい時の対処法

Last updated at Posted at 2021-02-26

こんにちは。たにーです。

久しぶりの投稿になってしまいましたが
これからサボらずに投稿します:sob:

今日は、Ruby on Railsを使っていて、
「rails db:migrate したけど、追加し忘れたカラムがあった、、、」と。

もちろんaddで追加する方法もありますが、
無駄にファイルを多く作りたくない、見た目を綺麗にしたいなどあると思います。
その時の対処方について解説します。

事前準備&復習も兼ねて

①model作成
上記のコマンドでmodel:usersを作成します。
そうすると下記が実行され、ファイルが作成されます。

terminal
 $ rails g model User name:string body:text

   Running via Spring preloader in process 10452
         invoke  active_record
         create db/migrate/20210226145734_create_users.rb
         create    app/models/user.rb
         invoke    test_unit
         create      test/models/user_test.rb
         create      test/fixtures/users.yml

②migration実行
rails db:migareを実行することで、DBに反映されます。

terminal
$ rails db:migrate

== 20210226145734 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0114s
== 20210226145734 CreateUsers: migrated (0.0126s) =============================

全てのカラムを記載するのを忘れていた

**ここで[image_id]を記載するのを忘れてしまった、、、**としましょう。
想定していたのは、[name],[body],[image_id]だったします。

rails db:migrateする前でしたら、ファイルに直接記入して問題ないのですが、
それだと上手く反映できない様子。
追記してmigrateするも反応なし。

_create_users.rb
class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.text :body
      t.string :image_id     ⇨追加で記載してみた
      t.timestamps
    end
  end
end

結果
$ rails db:migrate
$ 

rails db:rollbackを実行しましょう

rails db:rollback を実行することにより、
1つ前の状態に戻すことができます。

terminal
$ rails db:rollback

rails db:rollback
== 20210226152738 CreateUsers: reverting ======================================
-- drop_table(:users)
   -> 0.0051s
== 20210226152738 CreateUsers: reverted (0.0136s) =============================

これにより、migrateする前の状態に戻りました。

追加カラムをファイル内に記載し、migrate実行

_create_users.rb
class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.text :body
      t.string :image_id     ⇨追加で記載
      t.timestamps
    end
  end
end

そして、再度「rails db:migrate」を実行します。

terminal
$ rails db:migrate

== 20210226152738 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0069s
== 20210226152738 CreateUsers: migrated (0.0080s) =============================

上記のように、無事migrateされました。
schemaファイルを見おると、想定している内容で反映されておりました。

schema.rb
ActiveRecord::Schema.define(version: 2021_02_26_152738) do

  create_table "users", force: :cascade do |t|
    t.string "name"
    t.text "body"
    t.string "image_id"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

end

schema.rbについて

rails db:migrateの実行結果が反映されるファイルです。

参考文献

rails tutorial

以上、たにーでした。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?