Ini jawaban yang agak panjang, jadi saya membaginya menjadi beberapa bagian. Gesper!
Teori saya
Dugaan saya adalah bahwa basis data pengembangan Anda tidak berisi lessons_id_seq
urutan, dan bahwa definisi flightlessons.id
diatur untuk bergantung padanya (yaitu, persis apa yang dimasukkan Rails ke dalam file skema Anda).
Bagaimana dan mengapa? Anda mungkin mengganti nama lessons
tabel ke flightlessons
di beberapa titik di masa lalu, tetapi penggantian nama itu tidak mengubah urutan tempat tabel bergantung -- dan sejak schema.rb
apakah tidak merekam urutan, lessons_id_seq
sequence tidak disalin ke database pengujian Anda, dan dengan demikian Anda mendapatkan kesalahan ini.
Untuk memverifikasi teori saya, jalankan rails db
dan coba perintah berikut:
\d lessons_id_seq
Ini harus mengembalikan definisi urutan itu. Kemudian, coba:
\d flightlessons
Dan lihat definisi id
kolom. Saya berharap untuk menyertakan DEFAULT nextval('lessons_id_seq')
.
Perbaikan
Cara termudah untuk memperbaikinya adalah dengan beralih menggunakan structure.sql
bukannya schema.rb
(lihat dokumen
). Ini akan membawa status yang tepat dari database Anda dan menghindari gangguan atau interpretasi apa pun oleh Rails, yang menyebabkan masalah Anda saat ini. Saya selalu merekomendasikan structure.sql
untuk sistem produksi.
Namun, Anda juga dapat masuk ke database pengembangan dan mengubah nama urutan:
ALTER SEQUENCE lessons_id_seq RENAME TO flightlessons_id_seq;
ALTER TABLE flightlessons ALTER COLUMN id SET DEFAULT nextval('flightlessons_id_seq');
Ini akan menjadi ide yang buruk pada sistem produksi, tetapi jika masalah Anda hanya lokal, itu akan memperbaiki status database Anda saat ini dengan schema.rb
Anda dan dengan demikian mengatasi masalah Anda saat ini. Anda mungkin ingin menyandikannya ke dalam migrasi, jika Anda ingin rails db:drop db:create db:migrate
untuk mengerjakan aplikasi baru.
Kenapa sekarang?
Perilaku di mana Rails membuang default
nilai untuk kunci utama tabel Anda mungkin sangat baru di Rails 5. Sebelumnya, Rails mungkin baru saja mempercayai bahwa kolom ID Anda memiliki default yang waras, dan mengabaikan nilai apa pun yang sebenarnya dilihatnya. Tapi saya belum melakukan penelitian untuk melihat apakah itu benar atau tidak.