質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

3052閲覧

rails db:migrateをやりなおしたい

takuo5

総合スコア48

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/11/19 08:05

編集2019/11/19 08:06

前提・実現したいこと

railsチュートリアルを学習中のものです。
11章のAccountActivationのデータモデルのところでリンク内容
migrationファイルを作成した後にrails db:migrateでデータベースに反映させました。
その後、migrationファイルに文法ミスがある事に気づき、修正しました(上書きしたいmigrationファイル)。
これを再度データベースに上書きしたいのですがどのようにすればよろしいでしょうか。

反映済のmigrationファイル(1行目に文法ミスあり)

class AddActivationToUsers < ActiveRecord::Migration[5.1] def change add_column :users, :  activation_digest, :string add_column :users, :activated, :boolean, default: false add_column :users, :activated_at, :datetime end end

上書きしたいmigrationファイル(修正済)

class AddActivationToUsers < ActiveRecord::Migration[5.1] def change add_column :users, :activation_digest, :string add_column :users, :activated, :boolean, default: false add_column :users, :activated_at, :datetime end end

試したこと

migrationファイル修正後にrails db:migrateコマンドを打ち込んでみましたが、何も起こらず変更されませんでした。

補足情報(FW/ツールのバージョンなど)

AWS Cloud9
Google Chrome

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/11/19 08:06

そもそも文法違反のマイグレーションは正常に反映できたということでしょうか。
takuo5

2019/11/19 08:10

コメント頂きましてありがとうございます。 その時の文章は下記のようになっています。 $ rails db:migrate == 20191119070608 AddActivationToUsers: migrating ============================= -- add_column(:users, : activation_digest, :string) -> 0.0019s -- add_column(:users, :activated, :boolean, {:default=>false}) -> 0.0004s -- add_column(:users, :activated_at, :datetime) -> 0.0003s == 20191119070608 AddActivationToUsers: migrated (0.0040s) ====================
takuo5

2019/11/19 08:12

上記のように : と activation_digest の間にスペースができてしまったまま実行されています。 その後進めていくとactivation_digestに関するエラーが発生したのでこれが原因だと思い、修正したいと思っております。
maisumakun

2019/11/19 08:16

> その後進めていくと ですが、すでに他のマイグレーションも重なった状態でしょうか。それとも、当該のマイグレーションが最新でしょうか。
takuo5

2019/11/19 08:23

その後は$ rails db:migrate:reset とを実行して、rails db:seedを実行して下記のようなエラーが発生して、この問題に気づきました。 $ rails db:seed rails aborted! NoMethodError: undefined method `activation_digest=' for #<User:0x00000000041c96f8> Did you mean?  activation_digest=  activation_digest  activation_digest? activation_token=  activation_digest_was ・・・・・・・・・ この場合はご提案頂いた解決策のどれを選択するのが得策でしょうか?
maisumakun

2019/11/19 08:35

間違えたマイグレーションの後に、(間違いのあったテーブルに限らず)別なマイグレーションファイルを作成していますか?
takuo5

2019/11/19 09:49

いえ、_add_activation_to_users.rb のみです。 新たにmigrationファイルは作成されておりません。
guest

回答2

0

ベストアンサー

頑張ってなんとかすることもできます。

ですが、「reset して seed した」ってことはDBを作りなおしてもよいってことの様に見えます。
もしそうでしたら、db:dropし、db:createし、有るべきmigrationになおしてからdb:migrateするのが簡明かと

投稿2019/11/19 10:58

winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takuo5

2019/11/20 04:45

コメントいただきましてありがとうございます。 ご指示いただきました手順でデータベースを削除して作り直しました。 その後migrationファイルを修正してmigrateすることで、seedしたときに発生していたエラーもなくすすめることができました。 今回でデータベースのコマンドをいくつか覚えることができ、勉強になりました。 ありがとうございました。
guest

0

その後、migrationファイルに文法ミスがある事に気づき、修正しました

よく見たら、:の次のスペースが全角だったので、: activation_digestが文法的に成立してしまっています。つまり、' activation_digest'という名前の列ができている状態かと思います。

このようにマイグレーションを間違えた場合、取るべき方法としては3通りが考えられます。

  1. 間違ったままのマイグレーションでbin/rails db:rollbackして、それからマイグレーションを修正してbin/rails db:migrateをやり直す
  2. 元のマイグレーションは修正せずに、別にマイグレーションを作って、間違いを修正する
  3. マイグレーションとデータベースをそれぞれ手動で修正する

rollbackせずにマイグレーションを変更してしまった場合、もはやrollbackはできません(作成したはずの列が存在しない、逆に間違えて作った列がロールバックしても消えないことになります)。

投稿2019/11/19 08:15

編集2019/11/19 08:18
maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問