hip*_*lee 19 ruby-on-rails railstutorial.org
我正在通过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
Run Code Online (Sandbox Code Playgroud)
该指南随后说像往常一样更新dev&test db:
$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
我对*remember_token*的用户测试仍然失败,所以我使用命令行sqlite3 查看了dev和测试数据库中的用户表.它们看起来像这样:
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");
Run Code Online (Sandbox Code Playgroud)
似乎我的迁移尚未运行,但我不知道如何强制它运行.
Rus*_*nov 44
尝试重建您的数据库结构(警告:所有数据库数据都将丢失):
rake db:drop:all
rake db:create:all
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
如果您使用Rails <4.1,请不要忘记准备测试数据库:
rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
这是您使用教程后最简单的解决方案.但是,在生产或开发中有重要数据时,您应该花时间调查此问题.在这种情况下,您很可能已经创建了一个空迁移,运行rake db:migrate,然后向迁移添加了指令,因此您没有看到新字段,rake db:migrate也没有做任何事情.要解决此问题,您需要评论您的change说明,执行rake db:rollback,取消注释说明,然后rake db:migrate应用您错过的说明.
我和最初的问题有同样的问题。$ bundle exec rake db:migrate没有将 remember_token 添加到 .db 中,Latha Doddikadi 的回答对我有用。
我做了:
rake db:rollback
Run Code Online (Sandbox Code Playgroud)
进而:
$ bundle exec rake db:migrate
Run Code Online (Sandbox Code Playgroud)
其中将 remember_token 字段添加到数据库中,然后是:
bundle exec rspec spec/models/user_spec.rb
Run Code Online (Sandbox Code Playgroud)
通过了。
Finished in 0.92841 seconds
21 examples, 0 failures
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37579 次 |
| 最近记录: |