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

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

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

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

Q&A

解決済

2回答

410閲覧

railsチュートリアルの第6章の6-3でのエラーが出てしまい、 マイグレーションが保留中になっていて、 どうしたら解決できるかわからず困っています…泣

kazuki_0311

総合スコア7

Ruby on Rails 5

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

0グッド

2クリップ

投稿2019/08/25 15:08

前提・実現したいこと

railsチュートリアルの第6章の6-3でのエラーが出てしまい、
マイグレーションが保留中になっていて、
どうしたら解決できるかわからず困っています。

発生している問題・エラーメッセージ

ActiveRecord::PendingMigrationError Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development

該当のソースコード

$ bin/rails db:migrate RAILS_ENV=test 上記をターミナルに打ち込んだところ↓ ...20190825105635 AddIndexToUsersEmail: migrating ============================= -- email() rails aborted! StandardError: An error has occurred, this and all later migrations canceled: undefined local variable or method `email' for #<AddIndexToUsersEmail:0x000000000458b980>...

試したこと

railsチュートリアルの第6章の6-3の
リスト6.35($ bundle exec rake test)を実行しtestしたところ、

Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=test

というメッセージが表示され、とりあえず
$ bin/rails db:migrate RAILS_ENV=test
とターミナルに打ち込んでみたのですが、

...20190825105635 AddIndexToUsersEmail: migrating =============================
-- email()
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined local variable or method `email' for #AddIndexToUsersEmail:0x000000000458b980...

と以上のようなメッセージが発生してしまいました。

そこでとりあえずrails sでサーバーを起動して
動くのか試してみたところ

ActiveRecord::PendingMigrationError

Migrations are pending. To resolve this issue,
run: bin/rails db:migrate RAILS_ENV=development

というようなエラーが発生してしまいました。

色々調べてdbを一度削除したり、リセットして作り直したりしてみたのですが
上手くいかずそのほかのやり方をいくら調べて試してみても
解決策がわからず解決できなくなってしまいました。

恐れ入りますがこのエラーの解決方法を
ご存知の方がいらしたら教えていただけると非常に助かります。
よろしくお願いします。

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

railsチュートリアル
rails 5.1.6
AWS Cloud9を使用

初めてこのサイトを利用させていただくので
質問の仕方等間違っていたり伝わりずらかったり
していたらお許しください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

migration 20190825105635 AddIndexToUsersEmail の email と書いてある所を確認して下さい。
多分 email とかいてあります。 :email もしくは "email" にしてください

投稿2019/08/26 02:00

winterboum

総合スコア23340

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

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

kazuki_0311

2019/08/26 11:41

winterboumさんの仰る通り「email」と書いてあったので「:email」に変更して再度チャレンジしてみたところエラーが解消されて上手くいきました! ありがとうございます! ちなみになぜ「:」がなかったらダメだったのでしょう? railsチュートリアルの方の見本には「email」の前に「:」がありませんでした。 https://railstutorial.jp/chapters/modeling_users?version=5.1#code-users_migration
winterboum

2019/08/26 11:51

:email は class Symbol の、"email" は class String の インスタンスです。 でも email は変数で、それらインスタンスの入れ物で、「代入」( email = :email の様に)しなければ何者でもありません。 ので、未定義 というエラーになります。 リスト 6.29: メールアドレスの一意性を強制するためのマイグレーション には add_index :users, :email, unique: true となっているようですが?
kazuki_0311

2019/08/26 14:37

あれ?本当ですね。 railsチュートリアルの見本では「:email」になってます。 どうやら僕は見間違えた挙句、違う風に思い込んでしまっていたようです。汗 この度は詳細な回答を丁寧に教えてくださりありがとうございました!
guest

0

こんにちは。
一番は、テストを正しく実行したいということでしょうか?

リスト6.35だと、「password_digestカラムを追加するマイグレーション」になると思います。
エラーメッセージは、そのカラム追加ではなくて、emailという列にインデックスを設定しようとする際のエラーのようです。
リスト 6.29の処理が該当するでしょうか。

カラム追加やインデックス追加の対象になっているのは、usersテーブルです。
リスト6.2のusersテーブルを作る処理が実行されていないと、失敗します。

https://railstutorial.jp/chapters/modeling_users?version=5.1#code-users_migration


確認してほしい点:

色々調べてdbを一度削除したり、リセットして作り直したりしてみたのですが

とありますが、何度やっても再現しますか?
マイグレーションは、db/migrate 以下のファイルに配置されていると思います。
このファイルですが、ファイル名の順番、実質は日付の順に実行されます。

もしかしたら、ユーザテーブル作成、インデックス追加、暗号化したカラム追加、の処理を行うファイルの日付が前後してしまっているかもしれません。

マイグレーションの設定ファイルをただしく作成されているかどうか、確認してみてくださいね。

うまくいかない場合ですが、「テスト用のDB (RAILS_ENV=test) 」なら、いったんDBを削除してから再作成、マイグレーションを再実行で良いと思います。

投稿2019/08/25 23:13

suama

総合スコア1997

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

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

kazuki_0311

2019/08/26 11:42

おかげさまで解決できました! ありがとうございました!!
suama

2019/08/26 12:01

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問