0
我正在關注將Devise gem添加到Rails的tutorial。寶石的一個特點是使用Devise生成一個「用戶」,用於進一步的用戶驗證(Facebook,Twitter等)。我遇到了以下錯誤:如何解決SQLite設計錯誤
== 20150906025001 AddDeviseToUsers: migrating =================================
-- change_table(:users)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: duplicate column name: email: ALTER TABLE "users" ADD "email" varchar DEFAULT '' NOT
NULL/Users/jaker/.rvm/gems/ruby-2.0.0-p643/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize'
我已經在我的應用程序,有一個電子郵件的用戶模型,所以這是有道理的。但是,當我嘗試運行遷移並刪除我的「用戶」表時,我仍然收到相同的錯誤。
[時間戳] _add_devise_to_users.rb:
class AddDeviseToUsers < ActiveRecord::Migration
def self.up
change_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
# Uncomment below if timestamps were not included in your original model.
# t.timestamps null: false
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
def self.down
# By default, we don't want to make any assumption about how to roll back a migration when your
# model already existed. Please edit below which fields you would like to remove in this migration.
raise ActiveRecord::IrreversibleMigration
end
end
有誰知道如何解決這一問題?我很困惑,沒有文件似乎有幫助。非常感謝。
您的「刪除用戶」遷移是什麼樣的?或者你是否簡單地試圖扭轉遷移?如果是後者,它不能顛倒'change_table'方法,您需要手動執行此操作 –
我有一個名爲「[timestamp] _drop_users」的遷移,它只是在我的用戶表上執行「drop_table」操作。此遷移發生在AddDeviseToUsers之後@WesFoster –
發生這種情況是因爲'AddUsers'遷移嘗試在'DropUsers'遷移之前運行。只需註釋掉'AddUsers'遷移的'email'行 –