Como excluo todos os registros em uma das minhas tabelas de banco de dados em um aplicativo Ruby on Rails?
Como excluo todos os registros em uma das minhas tabelas de banco de dados em um aplicativo Ruby on Rails?
Respostas:
Se você estiver procurando uma maneira de fazê-lo sem o SQL, poderá usar delete_all.
Post.delete_all
ou com um critério
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
Veja aqui para mais informações.
Os registros são excluídos sem carregá-los primeiro, o que o torna muito rápido, mas interrompe a funcionalidade, como contador de cache, que depende do código de trilhos a ser executado após a exclusão.
ActiveRecord
modelos. A pergunta é sobre a exclusão de registros de uma 'tabela' e estou apenas apontando ou a suposição contida na resposta.
Se você quer dizer excluir todas as instâncias de todos os modelos, eu usaria
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
select
sempre que você precisar usar uma expressão if dentro de um bloco, para evitar ter que encadear o método compact para remover elementos nulos.
BlogPost.find_each(&:destroy)
Se o seu modelo se chama BlogPost, seria:
BlogPost.all.map(&:destroy)
MOPED: 127.0.0.1:27017 QUERY database=a_database collection=nothings selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3378ms)
Resposta mais recente, caso você queira excluir todas as entradas em todas as tabelas:
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
Mais informações sobre o eager_load
aqui .
Depois de chamá-lo, podemos acessar todos os descendentes de ActiveRecord::Base
e podemos aplicar um delete_all
em todos os modelos.
Observe que não limpamos a tabela SchemaMigration.