[英]Rails SQLite3::SQLException
我是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
Per Andre: rake db:drop db:create rake db:migrate
。 警告:这会清除您的所有数据。
我个人:阅读您的schema_migrations
表,看看db:migrate是否认为它应该运行您的迁移...
@Phlip的答案对我有用。 当您的数据库中已有用户时,“ remember_token”迁移将无法进行。 您必须清除日期记录,然后执行db:migrate。
我遇到了同样的问题。 这个问题的复本。 即使按照接受的答案中的说明进行操作,即使迁移文件位于db / migrate中,我也无法将“ remember_token”列添加到数据库中。 我打开了实际的迁移文件,发现其中没有包含所需的所有内容。 我的迁移文件如下所示:
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,我又恢复了业务! 如果有人遇到相同问题,只想将其留在这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.