[RUBY] [Rails] Error StandardError: Une erreur s'est produite, toutes les migrations ultérieures ont été annulées: La colonne ʻExternal key name` sur table` Table name` ne correspond pas à la colonne ʻid` sur `Table name`

contenu de l'erreur

$ rails db:migrate

Une erreur qui se produit lorsque la commande ci-dessus est exécutée. La notation d'erreur dans le terminal est la suivante. image.png

Extrait partiel du texte d'erreur.


Column `user_id` on table `items` does not match column `id` on `users`, which has type `bigint(20)`. To resolve this issue, change the type of the `user_id` column on `items` to be :bigint. (For example `t.bigint :user_id`).

Quand je traduis une partie de la phrase d'erreur ...

Traduction de phrase d'erreur.


table`items`Colonne`user_id`Mais`users`Colonne`id`Ne correspond pas. Pour résoudre ce problème`items`de`user_id`Type de colonne:Changez pour bigint.(Par exemple`t.bigint :user_id`)。

Cette fois, la colonne spécifiée comme clé externe dans la table des éléments ne correspond pas au référent! Voilà l'erreur.

Remède (hypothèse)

En conclusion, Rails recommande le «type de références» lors de l'utilisation de clés externes, vous n'avez donc pas besoin d'utiliser le «type bigint».

Étant donné que le point de cette erreur est ** ne peut pas être référencé **, on peut supposer qu'il y a un problème dans l'ordre dans lequel les fichiers de migration sont créés.

Quel est l'ordre de création des fichiers de migration?

En fonction de l'ordre de création, la table qui utilise la clé externe (la table qui décrit le type de références) et la table référencée peuvent ne pas pouvoir être référencées, et cette erreur s'est produite en raison d'un ordre de création incorrect.

L'ordre de création est (1) le tableau du côté référencé → (2) le tableau qui utilise la clé externe (le tableau qui décrit le type de références). La solution de contournement peut être résolue en modifiant la date et l'heure de création du fichier de migration.

Remède (vérification temporaire)

image.png La solution consiste à agrandir la partie numérique de l'image jointe dans la table qui utilise la clé externe que dans la table référencée.

C'est une erreur un peu difficile à deviner à partir de l'erreur.

Dans ce cas, si «create_items» vaut «20200909000000», alors «20200909100000» convient. Soit dit en passant, ** les 4 premiers chiffres correspondent au calendrier et les 4 suivants au mois et au jour **.

finalement

Je pense que cette erreur est susceptible de se produire lorsque le nombre de tables augmente. Cependant, si vous connaissez la méthode cible, vous pouvez la résoudre sans aucun problème, alors veuillez vous y référer!

Recommended Posts

[Rails] Error StandardError: Une erreur s'est produite, toutes les migrations ultérieures ont été annulées: La colonne ʻExternal key name` sur table` Table name` ne correspond pas à la colonne ʻid` sur `Table name`
Erreur dans les rails docker db: migrate (StandardError: Une erreur s'est produite, toutes les migrations ultérieures ont été annulées :)
Que faire lorsqu'une erreur se produit dans les rails db: migrate ((StandardError: Une erreur s'est produite, cette migration et toutes les migrations ultérieures annulées :))
Que faire si vous obtenez une erreur (StandardError: Une erreur s'est produite, cette migration et toutes les migrations ultérieures ont été annulées :) dans rails db: migrate