2016-01-24 71 views
0

我試圖創建一個遷移來爲我的用戶表添加角色,但是我不小心鍵入了AddRolesToUsers而不是AddRoleToUser。所以我試圖創建一個具有正確AddRoleToUsers新的遷移,但是當我試圖運行rake db:migrate我得到了一個錯誤:修復遷移錯誤

SQLite3::SQLException: duplicate column name: role: ALTER TABLE "users" ADD "role" integer/Users/miguel/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.11/lib/sqlite3/database.rb:91:in `initialize' 

我試圖rake db:migrate:down VERSION=確實刪除了一個我不得不鍵入但我不斷收到同樣的錯誤。 PS:我刪除遷移文件運行rake db:migrate:down VERSION=

rails g migration AddRoleToUsers role:integer

遷移文件後,手動:

class AddRoleToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :role, :integer 
    end 
end 
+0

你能顯示兩個遷移文件的內容嗎? – Pavan

+0

您是否運行過任何遷移,無論是拼寫錯誤還是新錯誤?我基本上是問:角色列是否已經添加到用戶表還是剛剛創建遷移 – RuNpiXelruN

+0

@RuNpiXelruN我無法運行遷移我不斷收到該錯誤 –

回答

1

當您運行第一次遷移時,角色列被添加到Users表中。第二次遷移的錯誤告訴你很多。

要清除migration pending錯誤,您需要註釋掉新遷移中的add_column語句。 即

class AddRoleToUsers < ActiveRecord::Migration 
    def change 
    # add_column :users, :role, :integer 
    end 
end 

然後運行遷移。這樣,新遷移應該可以成功運行。

您現在可以取消註釋並刪除先前的遷移,以便在部署時只運行較新的遷移,並且成功添加role列。

+0

非常感謝!這個伎倆! –

+0

@MiguelAngelQuintana如果它能工作,你可以選擇它作爲答案,所以你最好引導其他人。別客氣。 :) – Cent

0

在這種情況下,點擊鼠標右鍵,刪除這兩個遷移文件,然後重新開始。存在錯誤,因爲它認爲要兩列並重命名爲角色添加到您的用戶表

UPDATE

在這種情況下,如果角色用戶表已經存在,遷移意有所指被成功運行並且不需要運行另一個。只要角色列在那裏,試圖添加另一個名爲角色的列總會給你一個錯誤。如果你想測試你仍然可以添加新的列,你可以通過創建一個測試遷移AddSomethingToUsers來檢查:string和rake db:遷移到測試,然後rake db:rollback到undo ..但它看起來像是它工作,所以我可能不會太惹她。

+0

我已經完成了。第一個我有錯誤,所以我刪除它做了另一個我得到了錯誤,一旦我試圖運行'rake db:migrate',然後我嘗試做第三個後刪除前兩個,問題仍然存在。 –

+0

嗯..看看你的模式......角色列已經存在於users表中嗎?對不起,如果你已經檢查了所有這些,只是試圖排除 – RuNpiXelruN

+0

yes't.integer「角色」已經存在於用戶表 –