Qual é a sintaxe para descartar uma coluna da tabela de banco de dados através de uma migração do Rails?
625
Qual é a sintaxe para descartar uma coluna da tabela de banco de dados através de uma migração do Rails?
remove_column :table_name, :column_name
Por exemplo:
remove_column :users, :hobby
removeria a coluna hobby da tabela de usuários.
up
e pordown
métodos, nãochange
, conforme explicado na resposta do @Powers.remove_column :table_name, :column_name, :type, :options
dentro dochange
método, pois se você especificar o tipo de reversão da migração, é possível. Da documentação: Os parâmetrostype
eoptions
serão ignorados se presentes. Pode ser útil fornecê-los nochange
método de uma migração para que possa ser revertido. Nesse caso,type
eoptions
será usado por add_column.change
método, mas somente se você especificar o tipo de coluna. Por exemploremove_column, :table_name, :column_name, :column_type
. Caso contrário, você receberá o seguinte erro ao tentar executar a migração:remove_column is only reversible if given a type
Para versões mais antigas do Rails
Para Rails 3 e superiores
fonte
rails g migration remove_field_name_from_table_name field_name:datatype
também funcionaAddXXXtoTTT
umRemoveXXXFromTTT
pode ser seguido por uma lista com espaçamento em branco de filename_name: data_type, e as instruções add_column e remove_column apropriadas serão criadas:rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
remove dois atributos usando uma única migração. Observe também que issoremove_column
não é suportado pelochange
método, então você deve escrever ambosup
edown
.change
isso. A reversão funciona como deveria.change
método que pode ser revertido *, precisará informar o tipo de dados (e todos os outros modificadores de campo); portanto, se você reverter essa migração, o campo poderá ser recriado corretamente. * Quando digo revertido, isso é em termos de estrutura do banco de dados, é claro que os dados dessa coluna obviamente serão perdidos.O Rails 4 foi atualizado, portanto, o método de alteração pode ser usado na migração para descartar uma coluna e a migração será revertida com êxito. Leia o seguinte aviso para aplicativos Rails 3:
Aviso do Rails 3
Observe que quando você usa este comando:
A migração gerada será mais ou menos assim:
Certifique-se de não usar o método change ao remover colunas de uma tabela de banco de dados (exemplo do que você não deseja no arquivo de migração nos aplicativos Rails 3):
O método de mudança no Rails 3 não é inteligente quando se trata de remove_column; portanto, você não poderá reverter essa migração.
fonte
change
método, orake db:rollback
comando cometerá um erro.rake db:rollback
é basicamente o oposto derake db:migrate
. Este bug foi corrigido no Rails 4 :)Em um aplicativo rails4, é possível usar o método de alteração também para remover colunas. O terceiro parâmetro é o data_type e no opcional você pode dar opções. Está um pouco oculto na seção 'Transformações disponíveis' na documentação .
fonte
Existem duas boas maneiras de fazer isso:
remove_column
Você pode simplesmente usar remove_column, assim:
Isso é bom se você precisar fazer apenas uma alteração no seu esquema.
bloco change_table
Você também pode fazer isso usando um bloco change_table, assim:
Eu prefiro isso porque acho mais legível e você pode fazer várias alterações ao mesmo tempo.
Aqui está a lista completa dos métodos suportados change_table:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
fonte
nos trilhos 5 você pode usar este comando no terminal:
por exemplo, para remover a coluna access_level (string) dos usuários da tabela:
e então execute:
fonte
Gere uma migração para remover uma coluna, de modo que, se for migrada (
rake db:migrate
), ela deve soltar a coluna . E deve adicionar a coluna novamente se essa migração for revertida (rake db:rollback
).A sintaxe:
remove_column: table_name,: column_name,: type
Exemplo:
Nota : Se você pular o data_type , a migração removerá a coluna com êxito, mas se você reverter a migração, ocorrerá um erro.
fonte
Instruções claras e simples para o Rails 5.2
1. Crie uma migração
Execute o seguinte comando no seu terminal:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Nota: o nome da tabela deve estar no plural, conforme a convenção de trilhos.
Exemplo:
No meu caso, quero remover a
accepted
coluna (um valor booleano) daquotes
tabela:rails g migration RemoveAcceptedFromQuotes accepted:boolean
Consulte a documentação re: uma convenção ao adicionar / remover campos em uma tabela:
2. Verifique a migração
3. Execute a migração
rake db:migrate
.... E então você está fora para as corridas!
fonte
rails db:migrate
Remover colunas para o aplicativo RAILS 5
O comando acima gera um arquivo de migração dentro do
db/migrate
diretório. O sopro do snippet é um dos da coluna remover do exemplo da tabela gerado pelo gerador Rails,Também fiz um guia de referência rápida para o Rails, que pode ser encontrado aqui .
fonte
Você pode tentar o seguinte:
( Documentação oficial )
fonte
X = nome da coluna
Y = nome da tabela
EDITAR
Mudou
RemoveXColumnToY
paraRemoveXColumnFromY
como por comentários - fornece mais clareza para o que a migração está realmente fazendo.fonte
Para remover a coluna da tabela, você deve executar a seguinte migração:
Em seguida, execute o comando:
fonte
Dê o comando abaixo, ele adicionará o arquivo de migração por conta própria
Depois de executar o comando acima, você pode verificar o arquivo de migração, o código remove_column deve ser adicionado lá sozinho
Em seguida, migre o banco de dados
fonte
remove_column
nochange
método ajudará você a excluir a coluna da tabela.Acesse este link para uma referência completa: http://guides.rubyonrails.org/active_record_migrations.html
fonte
Para remover a coluna da tabela em apenas três etapas fáceis, como segue:
rails g migration remove_column_from_table_name
depois de executar este comando no terminal, um arquivo criado por esse nome e carimbo de data / hora (remove_column from_table_name).
Então vá para este arquivo.
arquivo interno você tem que escrever
remove_column :table_name, :column_name
Por fim, vá ao console e faça
rake db:migrate
fonte
Aqui está mais um do console de trilhos
ActiveRecord::Migration.remove_column(:table_name, :column_name)
fonte
Através
remove_column :table_name, :column_name
de um arquivo de migração
Você pode remover uma coluna diretamente em um console do Rails digitando:
ActiveRecord::Base.remove_column :table_name, :column_name
fonte
Faça assim;
rails g migration RemoveColumnNameFromTables column_name:type
Ou seja,
rails g migration RemoveTitleFromPosts title:string
De qualquer forma, seria melhor considerar também o tempo de inatividade, pois o ActiveRecord armazena em cache as colunas do banco de dados em tempo de execução. Se você soltar uma coluna, isso poderá causar exceções até que o aplicativo seja reiniciado.
Ref: forte migração
fonte
Simplesmente, você pode remover a coluna
Por exemplo,
fonte
primeiro tente criar um arquivo de migração executando o comando:
e, no diretório raiz do projeto, execute a migração executando o comando:
fonte