Comment écrire une migration du type Rails datetime au type date

** "Cela a l'air bien avec date au lieu de cette colonne" datetime` "**

J'ai utilisé datetime pour gérer la date, mais quand j'y pense attentivement, je n'ai pas besoin de" time ", donc je veux le convertir en date.

Ce but

environnement

Date / heure → conversion de date à l'aide du changement

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

Pouvez-vous db: rollback?

Tout va bien, veuillez patienter un moment avec git commi .., **! ** **

Gardez à l'esprit que les migrations reviennent.

Voyons si nous pouvons annuler la migration mentionnée ci-dessus.

$ 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.

Qu'est-ce qui a causé l'erreur

--Lorsque vous revenez avec change_column, vous ne pouvez pas le restaurer car vous ne connaissez pas les informations de type précédentes.

J'ai pu convertir le type avec `` 'date USING CAST (published_on AS date)' ', mais la restauration a échoué car ** "informations de type avant conversion" ** manquait.

Pour résoudre ce problème, réécrivons-le en tant que méthode ** up / down **.

Méthode utilisant haut / bas

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

En faisant cela

--db: migrate exécute datetime-> date de ʻup --db: rollback exécute down date-> datetime`

Bonus: datetime USING CAST donne une erreur dans PostgreSQL

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)

Il a été dit que «datetime» dans le monde Rails devient «timestamp» dans le monde PostgreSQL: sweat_smile:

Recommended Posts

Comment écrire une migration du type Rails datetime au type date
Comment écrire une recherche de comparaison de dates dans Rails
Comment écrire des rails
Rails: comment bien écrire une tâche de râteau
[Rails] Comment écrire lors de la création d'une sous-requête
Comment écrire des graines de Rails
Comment écrire le routage Rails
java: Comment écrire une liste de types génériques [Note]
Comment créer un formulaire pour sélectionner une date dans le calendrier
[Rails] Comment écrire la gestion des exceptions?
Un mémorandum quand j'ai étudié comment convertir du type Epoch Time en Date avec Scala
[Basique] Comment écrire un auto-apprentissage Dockerfile ②
Comment insérer une vidéo dans Rails
[Introduction à Java] Comment écrire un programme Java
[rails] Comment créer un modèle partiel
[SpringBoot] Comment écrire un test de contrôleur
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Comment lier Rails6 Vue (à partir de la construction de l'environnement)
Comment obtenir un heapdump à partir d'un conteneur Docker
[Validation] rails Comment spécifier après la date d'aujourd'hui
Comment implémenter une fonctionnalité similaire dans Rails
Comment créer facilement un pull-down avec des rails
[Rails] Comment créer un bouton de partage Twitter
Rails "Comment supprimer les fichiers de migration NO FILE"
[Rails] Comment lire le fichier XML téléchargé depuis l'écran en type Hash
Comment obtenir la date du type Date de JavaScript auquel les développeurs C # sont accros
Comment désinstaller Rails
Comment écrire docker-compose
Comment écrire Mockito
Comment écrire un fichier de migration
Comment repousser la barre oblique \
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
[Ruby on Rails] Comment écrire enum en japonais
Comment passer d'Eclipse Java à un fichier SQL
Comment écrire un test unitaire pour Spring Boot 2
Comment déployer à partir d'une image Docker locale vers Heroku
Comment supprimer un objet new_record construit avec Rails
Comment générer manuellement un JWT avec Knock in Rails
[Comment insérer une vidéo dans un hameau avec Rails]
[Java] Comment effacer un caractère spécifique d'une chaîne de caractères
Comment télécharger des images depuis AWS S3 (rails, carrierwave)
[Rails 6] Comment définir une image d'arrière-plan dans Rails [CSS]
[Rails] Comment charger JavaScript dans une vue spécifique
Comment écrire un mod de base dans Minecraft Forge 1.15.2
[rails] Comment publier des images
Écrivons comment créer une API avec SpringBoot + Docker à partir de 0
Migration de Cobol vers JAVA
Comment écrire du bon code
[Rails] Comment utiliser enum