Tôi gặp lỗi tương tự khi cố gắng tạo một mô hình mới có tham chiếu đến một mô hình hiện có đã được tạo trước khi chuyển sang Rails 5.1.
Mặc dù thông báo lỗi không rõ ràng lắm về điều đó, nhưng trong trường hợp của tôi, hóa ra vấn đề là kiểu dữ liệu không khớp giữa khóa chính của mô hình cũ và khóa ngoại của mô hình mới (MySQL không cho phép điều đó). Đó là vì kể từ Rails 5.1, kiểu dữ liệu mặc định của tất cả các khóa chính và khóa ngoại là bigint, nhưng đối với mô hình cũ, kiểu khóa chính vẫn là số nguyên.
Tôi đã giải quyết vấn đề này bằng cách chuyển đổi tất cả các khóa chính và khóa ngoài của các mô hình hiện tại thành bigint, vì vậy tôi có thể sử dụng mặc định mới của Rails và quên nó đi.
Một giải pháp khác cũng có thể là chỉ định kiểu số nguyên cho các khóa ngoại mới để chúng khớp với loại khóa chính của các kiểu cũ. Một cái gì đó như sau:
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