Mysql
 sql >> Base de données >  >> RDS >> Mysql

La migration pour créer une table génère Mysql2 ::Erreur :la table n'existe pas

J'ai eu une erreur similaire lorsque j'ai essayé de créer un nouveau modèle qui fait référence à un modèle existant qui a été créé avant la migration vers Rails 5.1.

Bien que le message d'erreur n'était pas très clair à ce sujet, dans mon cas, il s'est avéré que le problème était une incompatibilité de type de données entre la clé primaire de l'ancien modèle et la clé étrangère du nouveau modèle (MySQL ne le permet pas). Il en était ainsi parce que depuis Rails 5.1, le type de données par défaut de toutes les clés primaires et étrangères est bigint, mais pour l'ancien modèle, le type de clé primaire était toujours entier.

J'ai résolu ce problème en convertissant toutes les clés primaires et étrangères des modèles actuels en bigint, afin que je puisse utiliser les nouvelles valeurs par défaut de Rails et l'oublier.

Une solution de contournement pourrait également être de spécifier un type entier pour les nouvelles clés étrangères afin qu'elles correspondent au type de clés primaires des anciens modèles. Quelque chose comme ce qui suit :

class CreateUserImages < ActiveRecord::Migration[5.1]
  def change
    create_table :user_images do |t|
      t.references :user, type: :integer, foreign_key: true
      t.string :url
    end
  end
end