Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Migração para criar tabela aumenta Mysql2::Error:A tabela não existe


Recebi um erro semelhante ao tentar criar um novo modelo que tenha uma referência a um modelo existente que foi criado antes de migrar para o Rails 5.1.

Embora a mensagem de erro não tenha sido muito clara sobre isso, no meu caso, o problema era a incompatibilidade de tipo de dados entre a chave primária do modelo antigo e a chave estrangeira do novo modelo (o MySQL não permite isso). Foi assim porque desde o Rails 5.1 o tipo de dados padrão de todas as chaves primárias e estrangeiras é bigint, mas para o modelo antigo o tipo de chave primária ainda era inteiro.

Resolvi isso convertendo todas as chaves primárias e estrangeiras dos modelos atuais para bigint, para que eu possa usar os novos padrões do Rails e esquecer isso.

Uma solução alternativa também pode ser especificar o tipo inteiro para as novas chaves estrangeiras para que correspondam ao tipo de chave primária dos modelos antigos. Algo como o seguinte:
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