Como adiciono um valor padrão a uma coluna que já existe por meio de uma migração?
Toda a documentação que posso encontrar mostra como fazê-lo se a coluna ainda não existir, mas neste caso existe.
Como adiciono um valor padrão a uma coluna que já existe por meio de uma migração?
Toda a documentação que posso encontrar mostra como fazê-lo se a coluna ainda não existir, mas neste caso existe.
Aqui está como você deve fazê-lo:
change_column :users, :admin, :boolean, :default => false
Porém, alguns bancos de dados, como o PostgreSQL, não atualizarão o campo para as linhas criadas anteriormente, portanto, atualize o campo manualmente também na migração.
up
bloco e não em umchange
bloco. Você pode deixar odown
bloco vazio. Não reverterá a tabela para a condição original, mas a migração pode ser revertida.fonte
from:
eto:
se você quer que ele seja reversível :)from
eto
foi adicionado no Rails 5+ neste commit: github.com/rails/rails/pull/20018/filesPara Rails 4+ , use
change_column_default
fonte
def change
`add_column: foos,: name, default:" algo para valores existentes "` `change_column_default: foos,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- mas também não funciona.Usar
def change
significa que você deve escrever migrações reversíveis. Echange_column
não é reversível. Você pode subir, mas não pode descer, poischange_column
é irreversível.Em vez disso, embora possa haver algumas linhas extras, você deve usar
def up
edef down
Portanto, se você tiver uma coluna sem valor padrão, faça isso para adicionar um valor padrão.
Ou se você deseja alterar o valor padrão para uma coluna existente.
fonte
** Rails 4.X + **
No Rails 4, você não pode gerar uma migração para adicionar uma coluna a uma tabela com um valor padrão. As etapas a seguir adicionam uma nova coluna a uma tabela existente com o valor padrão true ou false.
1. Execute a migração da linha de comandos para adicionar a nova coluna
O comando acima irá adicionar uma nova coluna na sua tabela.
2. Defina o novo valor da coluna como TRUE / FALSE editando o novo arquivo de migração criado.
** 3 Para fazer as alterações na tabela do banco de dados do aplicativo, execute o seguinte comando no terminal **
fonte
Executar:
Irá gerar esta migração:
Defina o valor padrão adicionando: default => 1
Corre:
fonte
Key is not present in table error
.Isto é o que você pode fazer:
EDIT: ... mas, aparentemente, este é um erro de novato!
fonte
before_save