2012-12-20 78 views
0

我目前有一個現有模型Document,需要一個新的自動遞增列。不幸的是,我在遷移過程中遇到了錯誤。將AUTO_INCREMENT列添加到Rails模型時出錯 - MySQL

我所採取的步驟是:

ruby script/generate migration add_index_column_to_Document

其正確生成空.rb題爲

20121220182429_add_index_column_to_document.rb

接下來,我編輯的文件看起來像:

class AddIndexColumnToDocument < ActiveRecord::Migration 
    def self.up 
    execute 'ALTER TABLE documents ADD index INT NOT NULL AUTO_INCREMENT PRIMARY KEY' 
    end 

    def self.down 
    execute 'ALTER TABLE documents DROP index' 
    end 
end 

然後我執行的遷移與rake db:migrate,並得到了以下錯誤:

== AddIndexColumnToDocument: migrating ======================================= 
-- execute("ALTER TABLE documents ADD index INT NOT NULL AUTO_INCREMENT PRIMARY KEY") 
rake aborted! 
An error has occurred, all later migrations canceled: 

Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT NOT NULL AUTO_INCREMENT PRIMARY KEY' at line 1: ALTER TABLE documents ADD index INT NOT NULL AUTO_INCREMENT PRIMARY KEY 

的MySQL版本,根據apt-cache show mysql-server是:5.5.28-0ubuntu0.12.04.2

不幸的是我,我的SQL代碼與我可以在網上找到的所有示例相匹配,所以我不確定它爲什麼不起作用。預先感謝您提供的任何幫助。

+0

是否有你不想使用傳統的'id'作爲primary_key的原因?如果你以後做了... – PinnyM

回答

4

嘗試轉義保留的單詞「索引」。更好的是,讓Rails爲你做:

class AddIndexColumnToDocument < ActiveRecord::Migration 
    def change 
    add_column :documents, :index, :primary_key 
    end 
end 
+0

或者更好,不要使用「索引」,不要使用「索引」,使用不同的名稱,以便每次在SQL片段。 –

+0

這是我上面關於使用'id'的評論。據推測,如果'id'不夠好,那麼就需要特別使用'索引'。 – PinnyM

+1

我只是說,在關係數據庫中調用列'索引'只是要求麻煩和醜陋的混亂。如果由於某種原因你不能使用'id','index'對於名字來說仍然是一個糟糕的選擇。 –