12

Ho provato ad aggiungere una colonna a una tabella dopo una colonna specifica nella tabella. Ecco quello che ho fatto:ruby ​​on rails aggiunge una colonna dopo il nome di una colonna specifica

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

Ecco ciò che il mio file di migrazione appare come:

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 

non penso il comando è andato bene. Vedo un '=' nel file sopra. Non penso che dovrebbe essere lì. Qualcuno può dirmi se ho perso qualcosa?

Se sì, come annullare quanto sopra?

risposta

38

Dubito che abbia permesso di effettuare effettivamente la migrazione a rake db:migrate, quindi non è necessario eseguire il rollback. Basta togliere il fondo tre add_column s e sostituire quello superiore con

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

e dovrebbe andare bene per la migrazione. Per riferimento futuro, ecco cosa quel comando immesso dovrebbe essere simile:

rails generate migration add_reaction_id_to_patient_allergies reaction_id:integer 

Lo spazio prima integer fatto generatore che sia stata una nuova colonna. Purtroppo non è possibile utilizzare la sintassi Ruby (a => b) sulla riga di comando.

+1

@michael Solo per aggiungere un'altra cosa a questa ottima risposta, per annullare una migrazione riuscita ma indesiderata, è possibile eseguire rake db: rollback - questo annulla la migrazione più recente. Puoi tornare indietro ripetendolo. Mi trovo spesso in annullamento per apportare piccole modifiche, come l'impostazione del valore predefinito o l'ordine delle colonne – Polsonby

+3

L'opzione ': after' non sembra essere inclusa nella [documentazione dell'API] (http://api.rubyonrails.org/classes /ActiveRecord/Migration.html), almeno per Rails 4.2.3. Scoperto dopo aver provato: la migrazione è andata bene ma l'ordine non è stato applicato. – nandinga

+0

@nandinga Sembra che la classe [ColumnDefinition] (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L13) nell'ultima versione di Rails supporti ancora l'opzione 'dopo', anche se non l'ho ancora testata nelle ultime versioni di Rails. – piersadrian