** "Es sieht gut aus mit" Datum "anstelle dieser Spalte" Datum / Uhrzeit "" **
Ich habe "datetime" verwendet, um das Datum zu behandeln, aber wenn ich sorgfältig darüber nachdenke, brauche ich keine "time", also möchte ich es in "date" konvertieren.
def change
rename_column :books, :released_at, :released_on
change_column :books, :released_on, 'date USING CAST(released_on AS date)'
end
Das ist in Ordnung, bitte warten Sie einen Moment mit git commi ..
, **! ** ** **
Beachten Sie, dass Migrationen zurückgesetzt werden.
Mal sehen, ob wir die oben erwähnte Migration zurücksetzen können.
$ rails db:rollback
== ..... : reverting ========
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
This migration uses change_column, which is not automatically reversible.
To make the migration reversible you can either:
1. Define #up and #down methods in place of the #change method.
2. Use the #reversible method to define reversible behavior.
change_column
ein Rollback durchführen, können Sie es nicht wiederherstellen, da Sie die vorherigen Typinformationen nicht kennen.Ich konnte den Typ mit dem Datum USING CAST (release_on AS date) konvertieren, aber das Rollback schlug fehl, weil ** "Typinformationen vor der Konvertierung" ** fehlten.
Um dies zu lösen, schreiben wir es als ** Auf / Ab-Methode ** um.
def up
rename_column :books, :published_at, :release_on
change_column :books, :release_on, 'date USING CAST(release_on AS date)'
end
def down
rename_column :books, :release_on, :published_at
change_column :books, :published_at, 'timestamp USING CAST(published_at AS timestamp)'
end
Auf diese Weise
--db: migrate
führt up
datetime-> date
aus
--db: rollback
führt down
date-> datetime
aus
datetime USING CAST
gibt einen Fehler in PostgreSQL auschange_column :books, :released_at, 'datetime USING CAST(released_at AS datetime)'
PG::UndefinedObject: ERROR: type "datetime" does not exist
LINE 1: ...released_at" TYPE datetime USING CAST(published_at AS datetime)
Es wurde gesagt, dass die "Datum / Uhrzeit" in der Rails-Welt zum "Zeitstempel" in der PostgreSQL-Welt wird: heat_smile:
Recommended Posts