Adicionei uma tabela que achava que ia precisar, mas agora não pretendo mais usá-la. Como devo remover essa tabela?
Já executei migrações, portanto, a tabela está no meu banco de dados. Eu acho que rails generate migration
deveria ser capaz de lidar com isso, mas ainda não descobri como.
Eu tentei:
rails generate migration drop_tablename
mas isso apenas gerou uma migração vazia.
Qual é a maneira "oficial" de descartar uma tabela no Rails?
ruby-on-rails
database
ruby-on-rails-3
migration
rake
Jason Whitehorn
fonte
fonte
rails generate migration
possui opções de linha de comando para gerar código de migração para criar tabelas, adicionar ou alterar colunas, etc., seria bom se também houvesse uma opção de descartar uma tabela - mas não. Certamente, escrever aup
peça é simples - basta ligardrop_table
- mas adown
peça, gerando a tabela novamente, nem sempre pode ser tão simples, especialmente se o esquema da tabela em questão tiver sido alterado pelas migrações após sua criação inicial. Talvez alguém deva sugerir aos desenvolvedores do Rails que adicionar essa opção seria uma boa ideia.rake
comando de criação de migração, com o nome de uma tabela como parâmetro, que produzisse as funçõesup
edown
funções necessárias .Respostas:
Você nem sempre poderá simplesmente gerar a migração para já ter o código que deseja. Você pode criar uma migração vazia e preenchê-la com o código necessário.
Você pode encontrar informações sobre como realizar tarefas diferentes em uma migração aqui:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Mais especificamente, você pode ver como descartar uma tabela usando a seguinte abordagem:
fonte
Primeiro, gere uma migração vazia com o nome que desejar. É importante fazê-lo dessa maneira, pois cria a data apropriada.
Isso irá gerar um arquivo .rb em / db / migrate / like 20111015185025_drop_products_table.rb
Agora edite esse arquivo para ficar assim:
A única coisa que adicionei foi
drop_table :products
eraise ActiveRecord::IrreversibleMigration
.Então corra
rake db:migrate
e isso derrubará a mesa para você.fonte
down
método, não a recuperará, para que não seja realmente uma reversão adequada. É melhor indicar claramente que a migração é irreversível do que dar uma falsa sensação de que pode ser recuperada.Escreva sua migração manualmente. Por exemplo, corra
rails g migration DropUsers
.Quanto ao código da migração, vou apenas citar o post do Maxwell Holder Checklist de Migração do Rails
RUIM - executando
rake db:migrate
e depoisrake db:rollback
falharáBOM - revela intenção de que a migração não deve ser reversível
MELHOR - é realmente reversível
fonte
schema.rb
, não se esqueça de procurar tambémschema.rb
chaves estrangeiras. Em seguida, adicione a definição de chave estrangeira aodrop_table
bloco, por exemplo:t.foreign_key "other_table"
Enquanto as respostas fornecidas aqui funcionam corretamente, eu queria algo um pouco mais "direto", mas encontrei aqui: link Primeiro, digite o console do rails:
Então digite:
E pronto, funcionou para mim!
fonte
rails destroy model User
Você precisa criar um novo arquivo de migração usando o seguinte comando
e escreva o código drop_table no arquivo de migração recém-gerado (db / migration / xxxxxxx_drop_table_xyz) como
Ou, se você quiser descartar a tabela sem migração, basta abrir o console do Rails
e execute o seguinte comando
ou você pode usar um comando mais simplificado
fonte
fonte
Eu acho que, para ser completamente "oficial", você precisaria criar uma nova migração e colocar drop_table em self.up. O método self.down deve conter todo o código para recriar a tabela por completo. Presumivelmente, esse código pode ser obtido do schema.rb no momento em que você cria a migração.
Parece um pouco estranho inserir código para criar uma tabela que você sabe que não precisará mais, mas isso manteria todo o código de migração completo e "oficial", certo?
Eu fiz isso apenas para uma mesa que precisava largar, mas honestamente não testei o "baixo" e não sabia por que.
fonte
raise ActiveRecord::IrreversibleMigration
no método self.down, pelo menos você se dará um erro / aviso se tentar reverter.CreateMyTable.up
eActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_paths, X)
onde X é a migração que criou originalmente a tabela, mas nenhuma delas funciona - em ambas as abordagens, o AR primeiro verifica se a migração já foi aplicada e, se houver, ignora-a silenciosamente. `você pode simplesmente soltar uma tabela no console do rails. primeiro abra o console
depois cole este comando no console
substitua table_name pela tabela que você deseja excluir.
você também pode soltar a tabela diretamente do terminal. basta entrar no diretório raiz do seu aplicativo e executar este comando
fonte
A maneira simples e oficial seria esta:
Agora vá para o seu db / migrate e procure seu arquivo que contém o nome_da_tabl nome do arquivo e edite-o para isso.
Então você precisa correr
no seu console.
fonte
Você pode reverter uma migração da maneira que está no guia:
http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations
Gere uma migração:
Escreva a migração:
Dessa forma, você também pode reverter e usar para reverter qualquer migração
fonte
Alternativa para gerar exceção ou tentar recriar uma tabela agora vazia - enquanto ainda permite a reversão da migração, refazer etc. -
fonte
Como não consegui fazê-lo funcionar com o script de migração, continuei com esta solução. Entre no console de trilhos usando o terminal:
Tipo
Funciona bem para mim. Isso removerá a tabela anterior. Não se esqueça de correr
fonte
Abra seu console de trilhos
fonte
ActiveRecord::Base.connection.drop_table :table_name
fonte
Eu precisava excluir nossos scripts de migração junto com as próprias tabelas ...
a partir da janela do terminal:
ou
fonte
a melhor maneira que você pode fazer é
então faça o seguinte
fonte
Corre
Onde
<version>
está o número da versão do seu arquivo de migração que você deseja reverter.Exemplo:-
fonte
se alguém estiver procurando como fazer isso no SQL.
digite
rails dbconsole
do terminaldigite a senha
No console faça
USE db_name;
DROP TABLE table_name;
exit
Não se esqueça de remover o arquivo de migração e a estrutura da tabela do esquema
fonte
rails db
se você quiser soltar uma tabela específica, você pode fazer
caso contrário, se você quiser soltar todo o seu banco de dados, poderá fazer
fonte
Eliminar tabela / migração
run: - $ rails gera migração DropTablename
exp: - $ rails gera migração DropProducts
fonte
Execute este comando: -
então:
ou se você estiver usando o banco de dados MySql, então:
show databases;
show tables;
drop table_name;
fonte
Se você deseja excluir a tabela do esquema, execute a operação abaixo -
fonte