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
ガイドでは、通常どおりに開発およびテスト データベースを更新するように指示されています。
$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare
*remember_token*のユーザーテストがまだ失敗しているので、ユーザーコマンドライン sqlite3 を使用した dev および tests データベースのテーブル。次のようになります。
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");
移行はまだ実行されていないようですが、強制的に実行する方法がありません。
ベストアンサー1
データベース構造を再構築してみてください(警告:すべての 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
見逃した手順を適用する必要があります。