So schreiben Sie eine Migration vom Rails-Datums- / Uhrzeittyp zum Datumstyp

** "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.

Dieses Ziel

Umgebung

Datums- / Uhrzeit- → Datumskonvertierung mit Änderung

def change
  rename_column :books, :released_at, :released_on
  change_column :books, :released_on, 'date USING CAST(released_on AS date)'
end

Können Sie "db: rollback"?

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.

Was hat den Fehler verursacht?

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.

Methode mit Auf / Ab

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

Bonus: datetime USING CAST gibt einen Fehler in PostgreSQL aus

change_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

So schreiben Sie eine Migration vom Rails-Datums- / Uhrzeittyp zum Datumstyp
So schreiben Sie eine Datumsvergleichssuche in Rails
Wie schreibe ich Rails
Schienen: Wie man eine Rechenaufgabe schön schreibt
[Rails] Wie schreibe ich, wenn ich eine Unterabfrage mache?
Wie schreibe ich Rails Seed
Wie schreibe ich Rails Routing
java: Wie schreibe ich eine generische Typliste? [Hinweis]
So erstellen Sie ein Formular zur Auswahl eines Datums aus dem Kalender
[Rails] Wie schreibe ich eine Ausnahmebehandlung?
Ein Memorandum, als ich untersuchte, wie man mit Scala vom Typ Epoch Time to Date konvertiert
[Basic] So schreiben Sie ein Dockerfile Selbstlernend ②
So fügen Sie ein Video in Rails ein
[Einführung in Java] So schreiben Sie ein Java-Programm
[Rails] So erstellen Sie eine Teilvorlage
[SpringBoot] So schreiben Sie einen Controller-Test
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So verknüpfen Sie Rails6 Vue (aus dem Umgebungsbau)
So erhalten Sie einen Heapdump aus einem Docker-Container
[Validierung] Schienen Wie nach dem heutigen Datum angeben
So implementieren Sie eine ähnliche Funktion in Rails
So erstellen Sie einfach ein Pulldown mit Rails
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
Rails "So löschen Sie NO FILE-Migrationsdateien"
[Rails] Lesen der vom Bildschirm hochgeladenen XML-Datei im Hash-Typ
So ermitteln Sie das Datum aus dem Datumstyp von JavaScript, von dem C # -Entwickler abhängig sind
So deinstallieren Sie Rails
Wie schreibe ich Docker-Compose
Wie schreibe ich Mockito
So schreiben Sie eine Migrationsdatei
Wie man einen Schrägstrich zurückschlägt \
So implementieren Sie eine nette Funktion in Ajax mit Rails
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
So springen Sie von Eclipse Java zu einer SQL-Datei
So schreiben Sie einen Komponententest für Spring Boot 2
Bereitstellen von einem lokalen Docker-Image auf Heroku
So löschen Sie ein mit Rails erstelltes new_record-Objekt
So generieren Sie manuell ein JWT mit Knock in Rails
[So fügen Sie ein Video mit Rails in haml ein]
[Java] So löschen Sie ein bestimmtes Zeichen aus einer Zeichenfolge
So laden Sie Bilder von AWS S3 herunter (Rails, Carrierwave)
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
Wie schreibe ich einen Core Mod in Minecraft Forge 1.15.2
[Schienen] Wie poste ich Bilder?
Lassen Sie uns schreiben, wie API mit SpringBoot + Docker von 0 erstellt wird
Migration von Cobol nach JAVA
Wie man guten Code schreibt
[Rails] Verwendung von Enum