Eu já vi algumas perguntas (ou seja, essa ) aqui no SO sobre como adicionar um valor booleano padrão a uma coluna existente. Então tentei a change_column
sugestão, mas não devo estar fazendo certo.
Eu tentei:
$ change_column :profiles, :show_attribute, :boolean, :default => true
Que retorna -bash: change_column: command not found
Eu então corri:
$ rails g change_column :profiles, :show_attribute, :boolean, :default => true
...e
$ rails change_column :profiles, :show_attribute, :boolean, :default => true
Em seguida rake db:migrate
, correu , mas o valor para :show_attribute
permaneceu nil
. Na pergunta mencionada acima, no PostgreSQL, você precisa atualizá-lo manualmente. Como estou usando o PostgreSQL, adicionei o seguinte na minha create_profiles
migração:
t.boolean :show_attribute, :default => true
Alguém pode me dizer o que estou fazendo de errado aqui?
fonte
up
método da migração, que é uma nova classe que será gerada em db / migrate /. (Odown
método deve ser escrito para desfazer o queup
faz.) Faça essa alteração, entãorake db:migrate
.def self.up
edef self.down
show
ou seja qual for o nome da coluna.Como variação da resposta aceita, você também pode usar o
change_column_default
método em suas migrações:Documentos da API do Rails
fonte
show
ou qualquer que seja o nome da coluna.show_attribute
é o nome da coluna, acho que o rails 5 não tem nada a ver com isso, certo?Não tenho certeza de quando isso foi escrito, mas atualmente para adicionar ou remover um padrão de uma coluna em uma migração, você pode usar o seguinte:
Trilhos 5:
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns
Trilhos 4.2:
http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns
Essa é uma maneira pura de evitar procurar nas suas migrações ou esquema as especificações da coluna.
fonte
null: false
edefault: :something
basicamenteAlém disso, conforme o documento:
https://guides.rubyonrails.org/active_record_migrations.html
Portanto, não há gerador de trilhos pronto para uso. Conforme especificado pelas respostas acima, você deve preencher manualmente seu arquivo de migração com o
change_column_default
métodoVocê pode criar seu próprio gerador: https://guides.rubyonrails.org/generators.html
fonte
Se você acabou de fazer uma migração, poderá reverter e fazer sua migração novamente.
Para reverter, você pode executar quantas etapas desejar:
Ou, se você estiver usando o Rails 5.2 ou mais recente:
Em seguida, você pode simplesmente fazer a migração novamente:
Não se esqueça de
rake db:migrate
e se você estiver usando herokuheroku run rake db:migrate
fonte
Parece ser a melhor maneira de adicionar um padrão a uma coluna existente que ainda não o possui
null: false
.De outra forma:
Algumas pesquisas que fiz sobre isso:
https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b
fonte
Se você não deseja criar outro arquivo de migração para uma alteração pequena e recente - no Rails Console:
Então saia e entre novamente no console do rails, para que as DB-Changes entrem em vigor. Então, se você fizer isso ...
Você deve ver o valor padrão "show_attribute" como true.
Para registros existentes, se você deseja preservar as configurações "falsas" existentes e atualizar apenas os valores "nil" para seu novo padrão:
Atualize a migração que criou esta tabela, para que futuras compilações do banco de dados o consigam desde o início. Execute também o mesmo processo em qualquer instância implantada do banco de dados.
Se você estiver usando o método "new db migration", poderá atualizar os valores nulos existentes nessa migração.
fonte