私はRailsチュートリアルを進めていて、行き詰まっています。リスト8.16から始めて、<timestamp>_add_remember_token_to_users.rb
に以下の変更を加えました:
class AddRememberTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :remember_token, :string
add_index :users, :remember_token
end
end
次に、ガイドは通常どおりにdevとtest dbを更新するように言っています。
$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare
* remember_token *に対するユーザーテストがまだ失敗しているため、devのserテーブルを確認し、コマンドラインsqlite3でデータベースをテストしました。彼らはこのように見えます:
sqlite> .schema users
CREATE TABLE "users" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" varchar(255),
"email" varchar(255),
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL,
"password_digest" varchar(255));
CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email");
移行はまだ実行されていないようですが、強制的に実行する方法がわかりません。
データベース構造を再構築してみてください(警告:すべてのdbデータが失われます):
rake db:drop:all
rake db:create:all
rake db:migrate
Rails <4.1を使用する場合は、テストデータベースを準備することを忘れないでください。
rake db:test:prepare
チュートリアルで作業しているため、これが最も簡単なソリューションです。ただし、本番環境または開発中に重要なデータがある場合は、時間をかけて問題を調査する必要があります。この場合、空のマイグレーションを作成した可能性が最も高いです、rake db:migrate
、その後、移行に指示を追加したため、新しいフィールドが表示されず、さらにrake db:migrate
は何もしません。この問題を解決するには、change
の説明にコメントする必要があります。rake db:rollback
、コメントを外してからrake db:migrate
見逃した指示を適用します。
最初の質問と同じ問題がありました。 $ bundle exec rake db:migrate
は、remember_tokenを.dbに追加していませんでした。LathaDoddikadiの回答がうまくいきました。
やった:
rake db:rollback
その後:
$ bundle exec rake db:migrate
これにより、remember_tokenフィールドがデータベースに追加され、その後に以下が続きます。
bundle exec rspec spec/models/user_spec.rb
合格した。
Finished in 0.92841 seconds
21 examples, 0 failures
ロールバックしてから、正常に機能する可能性のある移行を再実行します。
rake db:rollback
そして、ロールバックした後、マイグレーションを再度実行します。