2009-06-09 3 views
1

Ich versuche, eine Migration für eine vorhandene Datenbank auszuführen, um den Spaltennamen für eine Tabelle zu ändern. Wenn ich die Migration durchführe, erhalte ich einen Fehler, der besagt, dass Blob/Text-Felder keinen Standardwert haben können. Die fragliche Spalte ist eine Textspalte mit einem Nicht-Null-Attribut, aber keinem Standardwert.Rails rename_column Migrationsproblem

Die Migration, die versucht ist Rails:

ALTER TABLE xxxxx CHANGE abcdABCD Text DEFAULT '' NOT NULL

Nun, ich habe die Migration nicht gefragt, den Spaltentyp zu ändern, habe ich nur gefragt Um die Spalte umzubenennen, warum versucht die Migration also, irgendetwas mit dem Spaltentyp zu tun?

Ich habe das Problem gegooglet und habe keine Erklärung oder Workaround gefunden.

Jede Hilfe wird geschätzt.

Vikram

Antwort

0

Es scheint ein langjähriges ungelöstes Ticket in dieser Frage zu sein, wie hier beschrieben:

rails bug report

Rails' Standardverhalten ist Spalt zu machen, die NULL sind, da dies verhindert, dass Fehlalarme bei Anwesenheitsüberprüfungen usw., wenn leere Zeichenfolgen zurück in Ruby übersetzt werden. Irgendeine Chance, die Sie umgehen können, indem Sie Ihre Textspalte neu definieren, um mit Nullwerten in der mySQL Konsole zu arbeiten?

EDIT

Sie diese Datei in Ihrer Migration tun, ist es nicht die Rails Art und Weise, aber es ist viel schöner als eine E-Mail an alle schicken ihre lokalen Kopien zu ändern:

MyModel.connection.execute "ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT NULL" 
+0

Arrghh die Schmerzen! Ich habe versucht, das Richtige zu tun, indem ich nicht aus der Rails-Migration herausging und alles richtig dokumentierte, damit andere folgen konnten, und einfach rake db: migrate ausführen konnte. Dies fügt einen zusätzlichen externen Schritt zu Rails hinzu. Vielen Dank für den Hinweis auf den Fehlerbericht. Ich bin mir nicht sicher, warum ich es nicht gefunden habe. –

+0

Danke, ja, das Ausführen eines manuellen Updates ist viel besser als externe Updates. –