12

Próbowałem dodać kolumnę do tabeli po określonej kolumnie w tabeli. Oto co zrobiłem:ruby ​​na szynach dodaj kolumnę po konkretnej nazwie kolumny

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

Oto co mój plik migracji wygląda następująco:

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 

nie sądzę polecenie poszło dobrze. Widzę "=" w powyższym pliku. Nie sądzę, że powinno tam być. Czy ktoś może mi powiedzieć, czy coś przeoczyłem?

Jeśli tak, w jaki sposób mogę cofnąć powyższe?

Odpowiedz

38

Wątpię, czy to pozwoliło ci na tę migrację, rake db:migrate, więc nie powinieneś się wycofywać. Wystarczy wyjąć dolne trzy add_column s i wymienić górną jedną z

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

i powinno być w porządku do migracji. Do wykorzystania w przyszłości, oto co to komenda wpisana powinna wyglądać następująco:

rails generate migration add_reaction_id_to_patient_allergies reaction_id:integer 

Przestrzeń przed integer wykonany generator że to nowa kolumna. Niestety nie można używać składni Ruby (a => b) w linii poleceń.

+1

@ Michael Po prostu dodać jeszcze jedną rzecz do tej wspaniałej odpowiedzi, aby cofnąć udaną, ale niechcianą migrację, możesz zrobić polecenie rake db: rollback - odwraca to ostatnią migrację. Możesz przejść dalej, powtarzając go. Często się cofam, aby wprowadzić drobne poprawki, takie jak ustawienie domyślnej wartości lub kolejność kolumn. – Polsonby

+3

Opcja ': after' nie powinna być zawarta w [dokumentacji API] (http://api.rubyonrails.org/classes) /ActiveRecord/Migration.html), przynajmniej dla Rails 4.2.3. Znaleziono po próbie: migracja poszła dobrze, ale zamówienie nie zostało zastosowane. – nandinga

+0

@nandinga Wygląda na to, że klasa [ColumnDefinition] (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L13) w najnowszych Railsach wciąż obsługuje opcja 'after', chociaż nie testowałem tego w ostatnich kilku wydaniach Rails. – piersadrian