Rotaie questione migratoria rename_column
-
13-09-2019 - |
Domanda
Sto cercando di eseguire una migrazione su un database esistente per cambiare il nome di colonna su un tavolo. Quando eseguo la migrazione, ottengo un errore che indica che i campi Blob / di testo non possono avere un valore predefinito. La colonna in questione è una colonna di testo, con un attributo non nullo, ma nessun valore predefinito.
La migrazione che Rails tentativi è:
ALTER TABLE xxxxx
CAMBIO abcd
testo ABCD
DEFAULT '' NOT NULL
Ora, io non ho chiesto la migrazione per cambiare il tipo di colonna, ho chiesto solo per rinominare la colonna, quindi perché è la migrazione cercando di fare qualcosa per il tipo di colonna?
Ho Googled il problema, e non sono venuto su con una spiegazione o soluzione.
Qualsiasi aiuto apprezzato.
Vikram
Soluzione
Ci sembra essere un biglietto irrisolto di lunga data su questo tema, come descritto qui:
comportamento predefinitoRails è quello di rendere le colonne che sono NULL, in quanto questo impedisce falsi positivi sui controlli di presenza, ecc, quando si traduce stringhe vuote di nuovo in Ruby. Qualche possibilità si può ovviare a questo ridefinendo la tua colonna di testo per lavorare con valori NULL nella console MySQL?
Modifica
È possibile farlo nel vostro file di migrazione, non è il modo in Rails, ma è molto più bello di inviando una mail a tutti di cambiare le loro copie locali:
MyModel.connection.execute "ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT NULL"