2014-02-23 43 views
1

我有一項用戶模型,我想添加一個管理員布爾字段,所以我跑了軌道4 :: sqlite3的的SQLException錯誤

軌產生遷移add_admin_to_users管理:布爾從而創立了以下遷移

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

然而,當我運行耙分貝:遷移我不斷收到以下錯誤

的SQLite3 ::的SQLException:沒有這樣的表:用戶:ALTER TABLE 「用戶」 ADD 「admin」 的布爾/ home/notebook/.rvm/gems/ruby​​-2.0.0-p353/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in`initialize'

我試過耙分貝:遷移VERSION = 0回滾到開始和重做耙分貝:再次遷移,但我不斷收到同樣的錯誤

這裏是我的用戶模型遷移文件

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 

我的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 

結束

回答

2

這聽起來像你的開發數據庫不與模式同步(或你認爲模式是什麼)。運行數據庫遷移適用於增量更改,而不是用於回滾數據庫並從第一次遷移運行的方式。爲此,您需要使用rake db:reset,這將刪除數據庫並從db/schema加載模式。 This post很好地概述了不同的數據庫rake命令。

+0

我試過了,然後運行rake db:遷移,但我不斷得到相同的錯誤 – Mutuma

+0

@Mutuma你的數據庫/模式文件中有一個用戶表? –

+0

我有13個模型,我的模式文件只顯示了一個我腳手架的模型,但是當我刪除腳手架時,模式中沒有任何變化。讓我發佈架構。rb文件 – Mutuma

1

你的數據庫中有沒有users表,您需要創建users表第一:

rails g migration create_users 

,並將該遷移的一個你想立即運行,即改變其時間戳之前。

一種更容易的選擇是在當前的文件中加入:

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

應用的解決方案,不管結果如何,你有你的遷移順序的問題,搜索內部遷移文件夾,實際上創建了一個遷移users表。

+0

我創建了一個用戶表,使用命令rails g model創建用戶表 – Mutuma

+0

的用戶請發佈遷移文件創建該表,這樣我們就可以確保遷移存在。 – juanpastas

+0

我有一個用戶名字段添加到相同的表使用類似的命令只有我用用戶名而不是管理員和字符串作爲字段類型,它的工作完美 – Mutuma