Khi bạn chạy rails db:migrate:reset
trái ngược với rails db:reset
, lược đồ cơ sở dữ liệu không được tải từ schema.rb
nhưng thay vào đó được tạo lại từ tất cả các lần di chuyển của bạn. Trong các tệp lược đồ và di chuyển, bạn không cần chỉ định id
, một trường được cung cấp theo mặc định. Tuy nhiên, bắt đầu với Rails 5.1, kích thước mặc định của trường id đã tăng lên
từ INT
thành BIGINT
cho MySQL và từ SERIAL
thành BIGSERIAL
cho PostgreSQL. Vì vậy, có thể có một số tương tác giữa các lần di chuyển của bạn, schema.rb
và lược đồ thực tế trong cơ sở dữ liệu đang khiến trường id được coi là mặc định (và bị bỏ qua) trong một số trường hợp và được chỉ định rõ ràng trong các trường hợp khác, chỉ do thay đổi kích thước mặc định. Thật khó để đoán được nguồn gốc của vấn đề nếu không xem tất cả các tệp liên quan.