Esta é uma resposta um pouco longa, então eu a dividi em seções. Preparar-se!
Minha teoria
Meu palpite é que seu banco de dados de desenvolvimento não conter o
lessons_id_seq
seqüência, e que sua definição de flightlessons.id
está configurado para depender dele (ou seja, exatamente o que o Rails está colocando em seu arquivo de esquema). Como e por quê? Você provavelmente renomeou as
lessons
tabela para flightlessons
em algum momento no passado, mas essa renomeação não alterou a sequência da qual a tabela dependia - e desde schema.rb
não seqüências de registro, o lessons_id_seq
sequência não é copiada para o banco de dados de teste e, portanto, você obtém esse erro. Para verificar minha teoria, execute
rails db
e tente os seguintes comandos:\d lessons_id_seq
Isso deve retornar a definição dessa sequência. Então tente:
\d flightlessons
E veja a definição do
id
coluna. Espero que inclua DEFAULT nextval('lessons_id_seq')
. Correções
A maneira mais fácil de corrigir isso é mudar para o uso de
structure.sql
em vez de schema.rb
(consulte os documentos
). Isso levará o estado exato do seu banco de dados e evitará qualquer interferência ou interpretação do Rails, que é o que está causando seu problema atual. Eu sempre recomendo structure.sql
para sistemas de produção. No entanto, você também pode acessar seu banco de dados de desenvolvimento e alterar o nome da sequência:
ALTER SEQUENCE lessons_id_seq RENAME TO flightlessons_id_seq;
ALTER TABLE flightlessons ALTER COLUMN id SET DEFAULT nextval('flightlessons_id_seq');
Isso seria uma péssima ideia em um sistema de produção, mas se o seu problema for apenas local, ele deve corrigir o estado atual do banco de dados com seu
schema.rb
e, assim, resolver seu problema atual. Você pode querer codificar isso em uma migração, se quiser rails db:drop db:create db:migrate
para trabalhar em um novo aplicativo. Por que agora?
O comportamento em que o Rails está despejando o
default
O valor para a chave primária da sua tabela pode muito bem ser novo no Rails 5. Anteriormente, o Rails pode ter apenas confiado que sua coluna ID tinha um padrão sensato e ignorado qualquer valor que realmente visse. Mas eu não fiz a pesquisa para ver se isso é verdade ou não.