简体   繁体   English

Rails 4 SQLite3 :: SQLException错误

[英]Rails 4 SQLite3::SQLException error

I have a devise User model which I want to add a admin boolean field so I ran 我有一个设计用户模型,我想添加一个管理布尔字段,所以我跑了

rails generate migration add_admin_to_users admin:boolean which created the following migration rails生成迁移add_admin_to_users admin:boolean ,它创建了以下迁移

class AddAdminToUsers < ActiveRecord::Migration
 def change
  add_column :users, :admin, :boolean
 end
end

However when I run rake db:migrate I keep getting the following error 但是,当我运行rake db:migrate时,我不断收到以下错误

SQLite3::SQLException: no such table: users: ALTER TABLE "users" ADD "admin" boolean/home/notebook/.rvm/gems/ruby-2.0.0-p353/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `initialize' SQLite3 :: SQLException:没有这样的表:users:ALTER TABLE“users”ADD“admin”boolean / home / notebook / .rvm / gems / ruby​​-2.0.0-p353 / gems / sqlite3-1.3.8 / lib / sqlite3 /database.rb:91:in`initialize'

I have tried to rake db:migrate VERSION=0 to rollback to the beginning and redone rake db:migrate again but I keep getting the same error 我试图rake db:migrate VERSION = 0回滚到开头并重做rake db:migrate但我一直得到同样的错误

Here is my user model migration file 这是我的用户模型迁移文件

class DeviseCreateUsers < ActiveRecord::Migration
  def change
   create_table(:users) do |t|
  ## Database authenticatable
  t.string :email,              :null => false, :default => ""
  t.string :encrypted_password, :null => false, :default => ""

  ## Recoverable
  t.string   :reset_password_token
  t.datetime :reset_password_sent_at

  ## Rememberable
  t.datetime :remember_created_at

  ## Trackable
  t.integer  :sign_in_count, :default => 0, :null => false
  t.datetime :current_sign_in_at
  t.datetime :last_sign_in_at
  t.string   :current_sign_in_ip
  t.string   :last_sign_in_ip

  ## Confirmable
  t.string   :confirmation_token
  t.datetime :confirmed_at
  t.datetime :confirmation_sent_at
  t.string   :unconfirmed_email # Only if using reconfirmable

  ## Lockable
  # t.integer  :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
  # t.string   :unlock_token # Only if unlock strategy is :email or :both
  # t.datetime :locked_at
  t.timestamps
end

add_index :users, :email,                :unique => true
add_index :users, :reset_password_token, :unique => true
add_index :users, :confirmation_token,   :unique => true
# add_index :users, :unlock_token,         :unique => true
end
end

My db/schema.rb file is as follows: 我的db / schema.rb文件如下:

ActiveRecord::Schema.define(version: 20140217093954) do
  create_table "entities", force: true do |t|
   t.string   "entity"
   t.string   "genre"
   t.string   "url"
   t.datetime "created_at"
   t.datetime "updated_at"
end

   add_index "entities", ["entity"], name: "index_entities_on_entity", unique: true

end 结束

It sounds like your development database is not in sync with the schema (or what you think the schema is). 听起来您的开发数据库与架构不同步(或者您认为架构是什么)。 Running database migrations is intended for incremental changes and not intended to be be a way to rollback the database and run from the first migration. 运行数据库迁移旨在用于增量更改,而不是用于回滚数据库并从第一次迁移运行的方法。 For this you want to use rake db:reset , which will drop the database and load the schema from db/schema. 为此,您希望使用rake db:reset ,它将删除数据库并从db / schema加载模式。 This post has a good overview of the different database rake commands. 这篇文章很好地概述了不同的数据库rake命令。

Your database has not users table, you need to create users table first: 您的数据库没有users表,您需要先创建users表:

rails g migration create_users

And put that migration before the one you are trying to run now, ie changing its timestamp. 并将该迁移放在您尝试运行的迁移之前,即更改其时间戳。

An easier option is to add in your current file: 更简单的选择是添加当前文件:

class AddAdminToUsers < ActiveRecord::Migration
 def change
  create_table :users
  add_column :users, :admin, :boolean
 end
end

Whatever of the solutions you apply, you have a problem with the order of your migrations, search inside migrate folder for a migration that actually creates users table. 无论您应用哪种解决方案,都会遇到迁移顺序问题,在迁移文件夹中搜索实际创建users表的迁移。

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

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