Respostas:
remove_column :table_name, :column_name
Por exemplo:
remove_column :users, :hobby
removeria a coluna hobby da tabela de usuários.
remove_column :table_name, :column_name, :type, :options
dentro do change
método, pois se você especificar o tipo de reversão da migração, é possível. Da documentação: Os parâmetros type
e options
serão ignorados se presentes. Pode ser útil fornecê-los no change
método de uma migração para que possa ser revertido. Nesse caso, type
e options
será usado por add_column.
change
método, mas somente se você especificar o tipo de coluna. Por exemplo remove_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
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Para Rails 3 e superiores
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
também funciona
AddXXXtoTTT
um RemoveXXXFromTTT
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 isso remove_column
não é suportado pelo change
método, então você deve escrever ambos up
e down
.
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:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
A migração gerada será mais ou menos assim:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
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):
def change
remove_column :table_name, :field_name
end
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.
change
método, o rake db:rollback
comando cometerá um erro. rake db:rollback
é basicamente o oposto de rake 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 .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Existem duas boas maneiras de fazer isso:
Você pode simplesmente usar remove_column, assim:
remove_column :users, :first_name
Isso é bom se você precisar fazer apenas uma alteração no seu esquema.
Você também pode fazer isso usando um bloco change_table, assim:
change_table :users do |t|
t.remove :first_name
end
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
nos trilhos 5 você pode usar este comando no terminal:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
por exemplo, para remover a coluna access_level (string) dos usuários da tabela:
rails generate migration remove_access_level_from_users access_level:string
e então execute:
rake db:migrate
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
Remove a coluna, também adiciona a coluna de volta se a migração for revertida.
Exemplo:
remove_column :users, :last_name, :string
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.
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) da quotes
tabela:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Consulte a documentação re: uma convenção ao adicionar / remover campos em uma tabela:
Há um atalho sintático especial para gerar migrações que adicionam campos a uma tabela.
trilhos geram migração add_fieldname_to_tablename fieldname: fieldtype
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
rake db:migrate
.... E então você está fora para as corridas!
rails db:migrate
Remover colunas para o aplicativo RAILS 5
rails g migration Remove<Anything>From<TableName> [columnName:type]
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,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Também fiz um guia de referência rápida para o Rails, que pode ser encontrado aqui .
rails g migration RemoveXColumnFromY column_name:data_type
X = nome da coluna
Y = nome da tabela
EDITAR
Mudou RemoveXColumnToY
para RemoveXColumnFromY
como por comentários - fornece mais clareza para o que a migração está realmente fazendo.
Dê o comando abaixo, ele adicionará o arquivo de migração por conta própria
rails g migration RemoveColumnFromModel
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
rake db:migrate
remove_column
no change
método ajudará você a excluir a coluna da tabela.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Acesse este link para uma referência completa: http://guides.rubyonrails.org/active_record_migrations.html
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
Aqui está mais um do console de trilhos
ActiveRecord::Migration.remove_column(:table_name, :column_name)
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
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
Simplesmente, você pode remover a coluna
remove_column :table_name, :column_name
Por exemplo,
remove_column :posts, :comment
up
e pordown
métodos, nãochange
, conforme explicado na resposta do @Powers.