前提・実現したいこと
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
そもそも文法違反のマイグレーションは正常に反映できたということでしょうか。
コメント頂きましてありがとうございます。
その時の文章は下記のようになっています。
$ 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) ====================
上記のように : と activation_digest の間にスペースができてしまったまま実行されています。
その後進めていくとactivation_digestに関するエラーが発生したのでこれが原因だと思い、修正したいと思っております。
> その後進めていくと
ですが、すでに他のマイグレーションも重なった状態でしょうか。それとも、当該のマイグレーションが最新でしょうか。
その後は$ 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
・・・・・・・・・
この場合はご提案頂いた解決策のどれを選択するのが得策でしょうか?
間違えたマイグレーションの後に、(間違いのあったテーブルに限らず)別なマイグレーションファイルを作成していますか?
いえ、_add_activation_to_users.rb のみです。
新たにmigrationファイルは作成されておりません。
回答2件
あなたの回答
tips
プレビュー