Il y a deux tables, la table Items et la table Users, et pour ajouter la colonne user-id à la table Items créée en premier, j'ai exécuté rails db: rollback
deux fois, puis j'ai exécuté rails db: migrate
Cependant, j'ai eu une erreur indiquant que la clé externe n'existe pas et que l'utilisateur SQL n'existe pas. (À l'origine, j'aurais dû ajouter une colonne en utilisant add.)
Avant de créer la table Users, la table Items a été créée provisoirement, donc une erreur s'est produite: l'ID utilisateur associé à la table Item n'existe pas.
Par exemple, supposons que vous ayez créé la première table Items ** à partir du 1er septembre **.
class CreateItems < ActiveRecord::Migration[6.0]
def change
create_table :items do |t|
t.references :user, foreign_key: true
Ceci est lié à la cause de l'erreur
t.string :name, null: false
t.timestamps
end
end
Omis ci-dessous
Supposons que vous ayez créé la deuxième table Users ** à compter du 5 septembre **.
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
Ce qui suit est omis
Je pense que le fichier de base de données ressemblera à db / migrate / 20200905052006_devise_create_users.rb, mais la partie numérique "20200905052006" indique la date et l'heure de création de la base de données.
rails db: migrate
migrera les bases de données une par une dans l'ordre à partir de la date et de l'heure les plus anciennes, donc dans ce cas, la base de données de la table Items créée le 1er septembre sera migrée en premier. ..
En d'autres termes, si vous essayez de migrer la table Items alors que la table Users n'a pas été migrée, t.references: user, Foreign_key: true
n'est pas considéré comme valide et il n'y a pas de clé externe pour l'utilisateur. Je reçois un message d'erreur indiquant qu'il n'y a pas de SQL.
Si vous renommez le nombre dans la partie date et heure, enregistrez le fichier pour que la série chronologique soit inversée, puis effectuez rails db: migrate
, la table Users est migrée en premier et la clé externe n'existe pas, l'utilisateur L'erreur selon laquelle SQL n'existe pas est résolue.
Je n'ai pas pu publier de message d'erreur précis car je n'ai pas gardé un bon enregistrement de l'erreur. Je prendrai des notes avec un sentiment de tension tout en étant conscient de l'affichage.
En premier lieu, si la colonne était ajoutée à l'aide de add, la série chronologique serait incorrecte et aucune erreur ne se produirait.
S'il avait été configuré pour ajouter, il aurait dû être possible de migrer uniquement la colonne usser-id de la table Items après la migration de la table User. C'était une erreur de faire deux fois rails db: rollback
et de changer directement les noms de colonne dans la table Items.
rails db: migrate
peut provoquer une erreur.rails db: migrate
est exécuté dans l'ordre à partir de la date et de l'heure les plus anciennes. (Rails db: rollback annule la dernière migration.)Recommended Posts