2012-12-20 5 views
0

현재 새로운 자동 증가 컬럼이 필요한 기존 모델 인 Document가 있습니다. 불행히도 마이그레이션하는 동안 오류가 발생합니다. 레일즈 모델에 AUTO_INCREMENT 컬럼 추가하기 -

내가 촬영 한 단계

는 다음과 같습니다

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 
: 제대로 빈 .rb

20121220182429_add_index_column_to_document.rb

다음

라는 제목의 생성

ruby script/generate migration add_index_column_to_Document

, 내가처럼 보이도록 파일을 편집

가 그럼 난 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

primary_key로 전통적인 'id'를 사용하지 않으려는 이유가 있습니까? 나중에 더 쉽게 시간을 가질 수 있습니다 ... – PinnyM

답변

4

예약 된 'index'단어를 이스케이프 해 봅니다. 레일스가 당신을 위해 해 줄 수있게하십시오 :

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

"index"를 전혀 사용하지 말고 다른 이름을 사용하십시오. 그래서 다른 이름으로 올리면 다시 사용할 필요가 없습니다. SQL 스 니펫. –

+0

그것은 'id'를 사용하는 것에 대한 위의 제 의견이었습니다. 아마도 'id'가 충분하지 않으면 'index'를 구체적으로 사용해야한다는 요구가있을 것입니다. – PinnyM

+1

저는 관계형 데이터베이스에서'index' 컬럼을 호출하는 것이 단지 문제와 추악한 엉망을 요구하고 있다고 말하고 있습니다. 어떤 이유로 든'id'를 사용할 수 없다면,'index'는 여전히 그 이름에 나쁜 선택입니다. –

관련 문제