我正在通过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
指南然后说更新开发&amp;像往常一样测试db:
$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare
我对* remember_token *的用户测试仍然失败,所以我查看了dev中的 user 表,并使用命令行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");
似乎我的迁移还没有运行,但我不知道如何强制它运行。
答案 0 :(得分:43)
尝试重建数据库结构(警告:所有数据库数据都将丢失):
rake db:drop:all
rake db:create:all
rake db:migrate
如果您使用Rails&lt; 4.1,不要忘记准备测试数据库:
rake db:test:prepare
这是您使用教程后最简单的解决方案。但是,在生产或开发中有重要数据时,您应该花时间调查此问题。在这种情况下,您很可能创建了一个空迁移,运行rake db:migrate
,然后向迁移添加了说明,因此您没有看到新字段,并且rake db:migrate
无法执行任何操作。要解决此问题,您需要评论change
说明,执行rake db:rollback
,取消注释说明,然后rake db:migrate
应用您错过的说明。
答案 1 :(得分:4)
我和初始问题有同样的问题。 $ bundle exec rake db:migrate
没有将remember_token添加到.db和Latha Doddikadi的回答对我有用。
我做了:
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
答案 2 :(得分:2)
回滚然后重新运行它可能有效的迁移。
rake db:rollback
滚动后再次重新运行迁移。