简体   繁体   English

Rails SQLite3 :: SQLException

[英]Rails SQLite3::SQLException

I'm new at the Rails framework and following Michael Hartl's tutorials. 我是Rails框架的新手,并且关注Michael Hartl的教程。 The error I have currently is below: 我目前遇到的错误如下: 在此处输入图片说明

First of all I see it says no such column: users.remember_token but why? 首先,我看到它no such column: users.remember_token但是为什么? Because I run this code: 因为我运行以下代码:

$ bundle exec rake db:migrate
$ bundle exec rake test:prepare

Before which I have a file with content: 在此之前,我有一个包含内容的文件:

class AddRememberTokenToUsers < ActiveRecord::Migration
  def change
    add_column :users, :remember_token, :string
    add_index  :users, :remember_token
  end
end

I am suspecting that this my come from my db/development.sqlite3 because I actually don't see a remember_token column. 我怀疑这是我的db/development.sqlite3来自我的原因,因为我实际上没有看到remember_token列。 But my assumption was after running $ bundle exec rake db:migrate I should see the new column right? 但是我的假设是在运行$ bundle exec rake db:migrate我应该看到新列了吗? This is how the development.sqlite3 looks like: 这是development.sqlite3样子:

在此处输入图片说明

I also have a SessionsHelper file which looks like this: 我还有一个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 . Per Andre: rake db:drop db:create rake db:migrate WARNING: this will erase all your data. 警告:这会清除您的所有数据。

Per me: Read your schema_migrations table to see if db:migrate with think it should run your migration... 我个人:阅读您的schema_migrations表,看看db:migrate是否认为它应该运行您的迁移...

@Phlip 's answer worked for me. @Phlip的答案对我有用。 when you database already have some user, then "remember_token" migrate won't work. 当您的数据库中已有用户时,“ remember_token”迁移将无法进行。 you must clean your date firt,then do db:migrate. 您必须清除日期记录,然后执行db:migrate。

I ran into the same exact issue. 我遇到了同样的问题。 Carbon copy of this question. 这个问题的复本。 Even after following the directions in the accepted answer, I could not get the "remember_token" column to be added to the database even though the migration file was there inside db/migrate. 即使按照接受的答案中的说明进行操作,即使迁移文件位于db / migrate中,我也无法将“ remember_token”列添加到数据库中。 I opened the actual migration file and noticed that it did not contain everything needed. 我打开了实际的迁移文件,发现其中没有包含所需的所有内容。 My migration file looked like this: 我的迁移文件如下所示:

class AddRememberTokenToUsers < ActiveRecord::Migration
end

When it needed to be this: 当需要这样时:

class AddRememberTokenToUsers < ActiveRecord::Migration
  def change
add_column :users, :remember_token, :string
  add_index  :users, :remember_token
  end
end

After adding in the missing code, saving, then doing a db:migrate, I was back in business! 添加丢失的代码,保存后,再执行db:migrate,我又恢复了业务! Just wanted to leave this here, if someone else runs into the same issue. 如果有人遇到相同问题,只想将其留在这里。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM