12

테이블의 특정 열 뒤에 테이블에 열을 추가하려고했습니다. 는 여기에 내가 무슨 짓을 :ruby ​​on rails 특정 열 이름 뒤에 열을 추가합니다.

class AddReactionIdToPatientAllergies < ActiveRecord::Migration 
    def change 
    add_column :patient_allergies, :reaction_id, :string 
    add_column :patient_allergies, :integer, :string 
    add_column :patient_allergies, :, :after 
    add_column :patient_allergies, :=, :string 
    end 
end 

내가 명령이 잘 된 것 같아요 :

여기
rails generate migration add_reaction_id_to_patient_allergies reaction_id: integer :after => 'patient_id' 

내 마이그레이션 파일의 모습입니다. 위의 파일에서 '='을 볼 수 있습니다. 나는 그것이 거기에 있어야한다고 생각하지 않는다. 누군가가 놓친다면 누군가 말해 줄 수 있습니까?

그렇다면 위의 내용을 어떻게 취소합니까?

답변

38

실제로이 슬라이드를 rake db:migrate으로 이전 할 수 있었는지 의심 스럽기 때문에 롤백 할 필요가 없습니다. 그냥 아래 세 가지 add_column의를 제거하고

add_column :patient_allergies, :reaction_id, :integer, after: :patient_id 

과 상단을 대체하며 마이그레이션 할 괜찮을한다.

rails generate migration add_reaction_id_to_patient_allergies reaction_id:integer 

공간 integer 전에 발전기가 새로운 열 생각했다 : 미래 참고로, 여기처럼 사용자가 입력하는 명령을 보여야합니다. 안타깝게도 Ruby 구문 (a => b)을 명령 줄에서 사용할 수 없습니다.

+1

@ 마이클이 위대한 답변에 한 가지 더 추가하면 성공적이지만 원치 않는 마이그레이션을 취소 할 수 있습니다. rake db : rollback - 가장 최근의 마이그레이션을 되돌립니다. 반복하여 더 멀리 나아갈 수 있습니다. 나는 종종 디폴트 값이나 열 순서를 설정하는 것과 같은 작은 개조를 원상태로 돌리고있다. – Polsonby

+3

': after' 옵션은 [API 문서] (http://api.rubyonrails.org/classes)에 포함 된 것처럼 보이지 않는다. /ActiveRecord/Migration.html), 최소한 Rails 4.2.3에서. 시도한 후에 발견 : 마이그레이션이 잘되었지만 주문이 적용되지 않았습니다. – nandinga

+0

@nandinga 최신 Rails의 [ColumnDefinition] (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L13) 클래스는 여전히 지원됩니다 'after' 옵션을 사용했지만, 레일스의 마지막 몇 릴리즈에서 이것을 테스트하지는 않았습니다. – piersadrian