Rails SQLite3 :: SQLException

时间:2013-11-22 18:31:22

标签: ruby-on-rails ruby sqlite

我是Rails框架的新手,并关注了Michael Hartl的教程。我目前的错误如下:enter image description here

首先,我看到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的样子:

enter image description here

我还有一个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

3 个答案:

答案 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之后,我又回来了! 如果其他人遇到同样的问题,只是想把它留在这里。