Pergunta

Qual é a sintaxe para soltar uma coluna da tabela de banco de dados através de uma migração de trilhos?

Foi útil?

Solução

remove_column :table_name, :column_name

Por exemplo:

remove_column :users, :hobby

removeria a coluna de hobby da tabela de usuários.

Outras dicas

Para versões mais antigas de trilhos

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Para Rails 3 ou mais

rails generate migration RemoveFieldNameFromTableName field_name:datatype

O Rails 4 foi atualizado, para que o método de alteração possa ser usado na migração para soltar uma coluna e a migração será revertida com sucesso. Leia o seguinte aviso para o Rails 3 aplicações:

Rails 3 Aviso

Observe que quando você usa este comando:

rails generate migration RemoveFieldNameFromTableName field_name:datatype

A migração gerada será algo 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 de mudança 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 remover_column, para que você não possa reverter essa migração.

Em um aplicativo Rails4, é possível usar o método de mudança também para remover colunas. O terceiro parâmetro é o data_type e, na opção, você pode dar opções. Está um pouco escondido na seção 'Transformações disponíveis' em a 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:

remove_column

Você pode simplesmente usar o Remone_column, assim:

remove_column :users, :first_name

Isso é bom se você precisar fazer apenas uma única alteração no seu esquema.

Bloco Change_Table

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, pois acho mais legível e você pode fazer várias alterações ao mesmo tempo.

Aqui está a lista completa de métodos de alteração suportados:

http://apidock.com/rails/activerecord/connectionadapters/schemastatements/change_table

No Rails 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 corra:

rake db:migrate

Remova as colunas para o aplicativo Rails 5

rails g migration Remove<Anything>From<TableName> [columnName:type]

Comando acima Gere um arquivo de migração dentro db/migrate diretório. Snippet Blow é um da coluna Remover do exemplo de tabela gerado pelo gerador de trilhos,

class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end

Eu também fiz um guia de referência rápido para trilhos que podem ser encontrados em aqui.

rails g migration RemoveXColumnFromY column_name:data_type

X = nome da coluna
Y = nome da tabela

EDITAR

Mudado RemoveXColumnToY para RemoveXColumnFromY Conforme comentários - fornece mais clareza para o que a migração está realmente fazendo.

Você pode tentar o seguinte:

remove_column :table_name, :column_name

(Documentação oficial)

Gerar uma migração para remover uma coluna de modo que se for migrada (rake db:migrate), deveria solte a coluna. E deveria Adicione a coluna de volta Se essa migração estiver revertida (rake db:rollback).

A sintaxe:

Remone_column: table_name ,: column_name ,: digite

Remove a coluna, também adiciona a coluna de volta Se a migração estiver revertida.

Exemplo:

remove_column :users, :last_name, :string

Observação: Se você pular o data_type, a migração removerá a coluna com sucesso, mas se você reverter a migração, ela lançará um erro.

Instruções claras e simples para trilhos 5.2

Aviso: você perderá dados se remover uma coluna do seu banco de dados. Para prosseguir, veja abaixo:


1. Crie uma migração

  • Corre O seguinte comando em seu terminal:

rails generate migration remove_fieldname_from_tablename fieldname:string

  • Nota: O nome da tabela deve estar em forma plural conforme a Convenção dos Rails.

Exemplo:

  • No meu caso, quero remover o accepted coluna (um valor booleano) do quotes tabela:

rails g migration RemoveAcceptedFromQuotes accepted:boolean

Há um atalho sintático especial para gerar migrações que adicionam campos a uma tabela.

Os trilhos geram migração add_fieldname_to_tablename fieldname: string

2. Verifique a migração

# 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

3. Execute a migração

rake db:migrate

.... e então você vai para as corridas!

Para remover a coluna da tabela, você deve executar após a migração:

rails g migration remove_column_name_from_table_name column_name:data_type

Em seguida, execute o comando:

rake db:migrate

Dê um comando abaixo, ele adicionará o arquivo de migração por conta própria

rails g migration RemoveColumnFromModel

Após a execução do comando acima, você pode verificar o arquivo de migração Remover_column, deve ser adicionado lá por conta própria

Em seguida, migre o banco de dados

rake db:migrate

remove_column dentro change O 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

Continue neste link para referência completa: http://guides.rubyonrails.org/active_record_migrations.html

Para remover a coluna da tabela em apenas 3 etapas da seguinte forma:

  1. Escreva este comando

rails g migration remove_column_from_table_name

Depois de executar este comando no Terminal One File criado por este nome e carimbo de hora (Remover_column de_table_name).

Em seguida, vá para este arquivo.

  1. arquivo interno que você tem que escrever

    remove_column :table_name, :column_name

  2. Finalmente vá para o console e depois faça

    rake db:migrate

Pela
remove_column :table_name, :column_name
em um arquivo de migração

Você pode remover uma coluna diretamente em um console de trilhos 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 o tempo de inatividade também, pois as colunas do banco de dados ActiveRecord em cache em tempo de execução, portanto, se você soltar uma coluna, isso poderá causar exceções até o seu aplicativo reiniciar.

Ref: Forte migração

Simplesmente, você pode remover a coluna

remove_column :table_name, :column_name

Por exemplo,

remove_column :posts, :comment

Aqui está mais um do Rails Console

ActiveRecord::Migration.remove_column(:table_name, :column_name)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top