sql >> Base de Datos >  >> RDS >> Mysql

La migración para crear una tabla genera Mysql2::Error:la tabla no existe

Recibí un error similar al intentar crear un nuevo modelo que tiene una referencia a un modelo existente que se creó antes de migrar a Rails 5.1.

Aunque el mensaje de error no era muy claro al respecto, en mi caso resultó que el problema era que el tipo de datos no coincidía entre la clave principal del modelo antiguo y la clave externa del nuevo modelo (MySQL no lo permite). Fue así porque desde Rails 5.1, el tipo de datos predeterminado de todas las claves principales y externas es bigint, pero para el modelo anterior, el tipo de clave principal seguía siendo entero.

Resolví esto convirtiendo todas las claves primarias y externas de los modelos actuales a bigint, para poder usar los nuevos valores predeterminados de Rails y olvidarme de eso.

Una solución alternativa también podría ser especificar el tipo de número entero para las nuevas claves foráneas para que coincidan con el tipo de clave principal de los modelos antiguos. Algo como lo siguiente:

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