Mysql
 sql >> Database >  >> RDS >> Mysql

La migrazione per creare una tabella solleva Mysql2::Error:la tabella non esiste

Ho ricevuto un errore simile durante il tentativo di creare un nuovo modello che ha un riferimento a un modello esistente che è stato creato prima della migrazione a Rails 5.1.

Sebbene il messaggio di errore non fosse molto chiaro al riguardo, nel mio caso si è scoperto che il problema era la mancata corrispondenza del tipo di dati tra la chiave primaria del vecchio modello e la chiave esterna del nuovo modello (MySQL non lo consente). Era così perché da Rails 5.1 il tipo di dati predefinito di tutte le chiavi primarie ed esterne è bigint, ma per il vecchio modello il tipo di chiave primaria era ancora intero.

L'ho risolto convertendo tutte le chiavi primarie ed esterne dei modelli attuali in bigint, così posso usare le nuove impostazioni predefinite di Rails e dimenticarmene.

Una soluzione alternativa potrebbe anche essere specificando il tipo intero per le nuove chiavi esterne in modo che corrispondano al tipo di chiavi primarie dei vecchi modelli. Qualcosa come il seguente:

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