Ich habe das Problem, dass ich eine Migration in Rails habe, die eine Standardeinstellung für eine Spalte festlegt, wie in diesem Beispiel:
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
Angenommen, ich möchte diese Standardeinstellungen in einer späteren Migration löschen. Wie mache ich das mit Rails-Migrationen?
Meine aktuelle Problemumgehung ist die Ausführung eines benutzerdefinierten SQL-Befehls in der Rails-Migration wie folgt:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
Dieser Ansatz gefällt mir jedoch nicht, da ich jetzt davon abhängig bin, wie die zugrunde liegende Datenbank diesen Befehl interpretiert. Im Falle einer Änderung der Datenbank funktioniert diese Abfrage möglicherweise nicht mehr und die Migration wird unterbrochen. Gibt es eine Möglichkeit, das Rückgängigmachen einer Standardeinstellung für eine Spalte in Schienen auszudrücken?
quelle
CHARACTER VARYING
Spalten nicht gelöscht, sondern nur auf gesetztNULL::character varying
.change_column_default(:table_name, :column_name, from: nil, to: false)
ALTER TABLE table_name ALTER COLUMN type DROP DEFAULT
,NULL
ich glaube , ich muss es nicht einstellen .Klingt so, als würden Sie mit Ihrer 'Ausführung' das Richtige tun, wie in den Dokumenten hervorgehoben:
quelle
Das folgende Snippet verwende ich, um
NULL
Spalten zu erstellenNOT NULL
, aber überspringeDEFAULT
auf Schemaebene:quelle
Schienen 4
quelle