Ik kreeg een soortgelijke fout bij het maken van een nieuw model met een verwijzing naar een bestaand model dat is gemaakt voordat ik naar Rails 5.1 migreerde.
Hoewel de foutmelding daar niet erg duidelijk over was, bleek in mijn geval dat het probleem een datatype mismatch was tussen de primaire sleutel van het oude model en de refererende sleutel van het nieuwe model (MySQL staat dat niet toe). Dat was zo omdat sinds Rails 5.1 het standaard datatype van alle primaire en externe sleutels bigint is, maar voor het oude model was het primaire sleuteltype nog steeds integer.
Ik heb dit opgelost door alle primaire en externe sleutels van de huidige modellen naar bigint te converteren, zodat ik de nieuwe standaardwaarden van Rails kan gebruiken en het kan vergeten.
Een tijdelijke oplossing kan ook zijn om het type integer voor de nieuwe externe sleutels op te geven, zodat ze overeenkomen met het type primaire sleutel van de oude modellen. Iets als het volgende:
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