【rails】db:migrateする前の状態に戻したい時の対処法
こんにちは。たにーです。
久しぶりの投稿になってしまいましたが
これからサボらずに投稿します
今日は、Ruby on Railsを使っていて、
「rails db:migrate したけど、追加し忘れたカラムがあった、、、」と。
もちろんaddで追加する方法もありますが、
無駄にファイルを多く作りたくない、見た目を綺麗にしたいなどあると思います。
その時の対処方について解説します。
事前準備&復習も兼ねて
①model作成
上記のコマンドでmodel:usersを作成します。
そうすると下記が実行され、ファイルが作成されます。
$ 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に反映されます。
$ 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するも反応なし。
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つ前の状態に戻すことができます。
$ 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
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:migrate
== 20210226152738 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0069s
== 20210226152738 CreateUsers: migrated (0.0080s) =============================
上記のように、無事migrateされました。
schemaファイルを見おると、想定している内容で反映されておりました。
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の実行結果が反映されるファイルです。
参考文献
以上、たにーでした。
Author And Source
この問題について(【rails】db:migrateする前の状態に戻したい時の対処法), 我々は、より多くの情報をここで見つけました https://qiita.com/ryo___eng/items/574bb9dee0125122573b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .