我是Rails框架的新手,并关注了Michael Hartl的教程。我目前的错误如下:
首先,我看到no such column: users.remember_token
,但为什么?因为我运行这段代码:
$ bundle exec rake db:migrate
$ bundle exec rake test:prepare
之前我有一个包含内容的文件:
class AddRememberTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :remember_token, :string
add_index :users, :remember_token
end
end
我怀疑这来自我的db/development.sqlite3
,因为我实际上看不到remember_token
列。但我的假设是在运行$ bundle exec rake db:migrate
之后我应该看到新列正确吗?这就是development.sqlite3
的样子:
我还有一个SessionsHelper文件,如下所示:
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
end
答案 0 :(得分:0)
Per Andre:rake db:drop db:create rake db:migrate
。警告:这将清除所有数据。
Per me:阅读你的schema_migrations
表,看看db:migrate是否认为它应该运行你的迁移......
答案 1 :(得分:0)
@Phlip的回答对我有用。 当你的数据库已经拥有一些用户时,那么&#34; remember_token&#34;迁移不起作用。你必须清理你的日期,然后做db:migrate。
答案 2 :(得分:0)
我遇到了同样的问题。这个问题的副本。即使按照接受的答案中的指示,我也无法得到&#34; remember_token&#34;即使db / migrate中存在迁移文件,也要添加到数据库中的列。我打开了实际的迁移文件,发现它没有包含所需的一切。我的迁移文件如下所示:
class AddRememberTokenToUsers < ActiveRecord::Migration
end
当需要这样时:
class AddRememberTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :remember_token, :string
add_index :users, :remember_token
end
end
在添加丢失的代码,保存,然后执行db:migrate之后,我又回来了! 如果其他人遇到同样的问题,只是想把它留在这里。