Při pokusu o vytvoření nového modelu, který má odkaz na existující model, který byl vytvořen před migrací na Rails 5.1, se mi zobrazila podobná chyba.
I když to chybové hlášení nebylo příliš jasné, v mém případě se ukázalo, že problémem byl nesoulad datových typů mezi primárním klíčem starého modelu a cizím klíčem nového modelu (MySQL to neumožňuje). Bylo tomu tak proto, že od Rails 5.1 je výchozí datový typ všech primárních a cizích klíčů bigint, ale u starého modelu byl typ primárního klíče stále celé číslo.
Vyřešil jsem to převedením všech primárních a cizích klíčů současných modelů na bigint, takže mohu použít nové výchozí hodnoty Rails a zapomenout na to.
Řešením může být také zadání typu celého čísla pro nové cizí klíče tak, aby odpovídaly typu primárního klíče starých modelů. Něco jako následující:
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