ActiveRecord: migrations multi-tabela
Este curso trata de migrations ActiveRecord que criam ou alteram várias tabelas relacionadas num único arquivo. Por padrão, o Rails envolve cada migration numa transação, então o arquivo entra por inteiro ou não entra. As aulas mostram como ordenar as chamadas create_table para que uma chave estrangeira nunca aponte para uma tabela inexistente. Explicam quando create_join_table serve e como acrescentar uma coluna NOT NULL a uma tabela que já tem linhas. Tratam ainda de reversible, revert e ActiveRecord::IrreversibleMigration, e terminam com um arquivo de exemplo que junta tudo.
O que você vai aprender
- ✓Por que mudanças de schema relacionadas ficam num arquivo de migration e numa transação
- ✓Como ordenar chamadas create_table para que chaves estrangeiras apontem para tabelas existentes
- ✓Quando create_join_table serve e por que seus índices precisam ser acrescentados à mão
- ✓Como acrescentar uma coluna NOT NULL com default constante a uma tabela com linhas
- ✓Passos de dados com reversible, revert e métodos up/down explícitos
- ✓O que fazer com ActiveRecord::IrreversibleMigration quando desfazer não tem inverso
Um arquivo, uma transação, uma mudança relacionada
"Migrations ActiveRecord" ensinou o que é uma migration. Migrations ActiveRecord: índices ensinou a tornar um único add_index seguro numa tabela que já tem linhas reais. Os dois ficaram numa operação, numa tabela existente. Nenhum perguntou o que acontece quando uma funcionalidade precisa de várias…
Ler a aula completa grátis →Currículo
7 aulasUm arquivo, uma transação, uma mudança relacionada
O Rails envolve cada migration numa transação, então tabelas relacionadas num mesmo arquivo entram juntas ou não entram.
Ordenação: uma tabela não pode referenciar outra que ainda não existe
O create_table da tabela referenciada precisa vir antes no arquivo, senão o PostgreSQL levanta PG::UndefinedTable.
create_join_table: um segundo jeito de relacionar duas tabelas
create_join_table cria uma tabela ponte sem id e sem índices, adequada a ligações sem dados próprios.
Adicionando uma coluna NOT NULL a uma tabela que já tem linhas
Uma coluna NOT NULL com default constante é só metadado no PostgreSQL; sem default, a chamada falha.
reversible e revert: desfazendo de propósito
reversible roda código diferente na ida e na volta para passos de dados, e revert roda um passo ao contrário.
Quando o change não consegue se reverter: IrreversibleMigration
SQL cru sem inverso levanta ActiveRecord::IrreversibleMigration ao desfazer; corrija com reversible ou um par up/down.
Juntando tudo: um arquivo ordenado e reversível
Uma migration de partners e partner_perks junta transação, ordem das tabelas, default constante e passo de dados reversível.