2016-10-11 2 views
0

레일즈 5 어플리케이션에서 실수로 데이터 타입이없는 컬럼을 생성했습니다. 데이터베이스는 SQLite입니다. 나는이 마이그레이션을 실행하려고했습니다레일즈 데이터 타입이없는 컬럼을 제거합니다

Rhys-MacBook-Pro:classmaster Rhys$ rails db:rollback == 20161011105423 AddActivitiesRefToStudents: reverting ======================= 
-- remove_column(:students, :activity, :reference) 
rails aborted! StandardError: An error has occurred, this and all later migrations canceled: undefined method `to_sym' for nil:NilClass 

: 나는 rails db:rollback을 시도 할 때

create_table "students", force: :cascade do |t| 
t.integer "club_id" 
t.string "email" 
t.datetime "created_at",  null: false 
t.datetime "updated_at",  null: false 
t.string "picture" 
t.integer "payment_plan_id" 
t.   "activity" 
t.index ["club_id"], name: "index_students_on_club_id" 
end 

는이 오류 얻을

class RemoveColumn < ActiveRecord::Migration 
def up 
    execute "ALTER TABLE students DROP COLUMN activity"; 
end 
end 

을하지만 SQLite는이 떨어지고 열을 지원하지 않습니다 생각합니다. 이 문제가 수정 되었습니까?

+0

열을 삭제하는 대신 데이터 유형을 설정하기 위해'change_column'을 사용해보십시오. –

답변

1

해당 파일에 유형이 없으면 삭제할 활동 열이라고 가정하고, 다른 열인 경우 아래 열 이름을 변경하십시오.

당신이하고 싶은 것은 당신이 할 수있는 테이블에서 칼럼을 떨어 뜨리는 것입니다. 명령 행에서 컬럼을 제거하기 위해 마이그레이션을 작성하려면 아래 행 (또는 아래의 행과 정확히 같음)과 같은 작업을 수행하십시오.

rails g migration drop_activity_column_from_students 

그런 다음 파일을 열면 그 안에있는 메서드가 있어야합니다.

def change 
    remove_column :students, :activity 
end 

그런 다음

rake db:migrate 

를 실행하고 하나의 열이 테이블에서 삭제 얻을 것을 볼 수 있습니다.

더 많은 정보를 얻고 싶다면 here 이주 정보를 찾을 수 있습니다.

+1

나는 이것을 시도했지만 마이그레이션을 튜닝 할 때 여전히'undefined method 'to_sym'for nil : NilClass'라는 에러 메시지가 나타납니다. – Rhys0h

+0

schema.rb 파일을 게시 할 수 있습니까? –

+0

'remove_column : students, : activity,'열의 유형, 예를 들어': string'과 같은 줄을 추가하십시오.'remove_column : students, : activity, : string' –

0

여러 가지 마이그레이션을 시도하고 rails db:reset을 성공적으로 실행 한 후 schema.rb 파일을 삭제하고 rails db:migrate을 실행했습니다.이 스키마는 데이터 유형이없는 열없이 처음부터 스키마를 다시 작성했습니다. . 마이그레이션 중 "활동"열의 추가가 없어서 문제가 반복되지 않도록하십시오. 그런 다음 이전에이 부분을 추가

rails g migration FixActivityTypeStudents

:

0

봅니다하여 컬럼의 유형을 변경합니다.

def change 
     change_column :students, : activity, :string 
    end 
+0

나는 이것을 시험해 보았지만'NoMethodError : undefined method 'to_sym'for nil : NilClass' @ Frank004 – Rhys0h

+0

@ Rhys0h 아마도 여러분의 모델에있는 메소드에 오류가있다. 모델에서 활동에 대해 to_sym을 가지고 있습니까? 주석을 달고 마이그레이션을 실행할 수 있습니다. – Frank004

관련 문제