¿Cómo elimino todos los registros en una de las tablas de mi base de datos en una aplicación Ruby on Rails?
¿Cómo elimino todos los registros en una de las tablas de mi base de datos en una aplicación Ruby on Rails?
Respuestas:
Si está buscando una manera de hacerlo sin SQL, debería poder usar delete_all.
Post.delete_all
o con un criterio
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
Ver aquí para más información.
Los registros se eliminan sin cargarlos primero, lo que lo hace muy rápido, pero romperá la funcionalidad como el caché del contador que depende del código de rieles que se ejecutará al eliminarlo.
ActiveRecord
modelos. La pregunta se refiere a eliminar el registro de una 'tabla' y solo estoy señalando o la suposición contenida en la respuesta.
Si te refieres a eliminar cada instancia de todos los modelos, usaría
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
select
siempre que necesites usar una expresión if dentro de un bloque, de esta manera evitas tener que encadenar el método compacto para eliminar elementos nulos.
BlogPost.find_each(&:destroy)
Si su modelo se llama BlogPost, sería:
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)
Respuesta más reciente en el caso de que desee eliminar todas las entradas en cada tabla:
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
Más información sobre el eager_load
aquí .
Después de llamarlo, podemos acceder a todos los descendientes de ActiveRecord::Base
y podemos aplicar a delete_all
en todos los modelos.
Tenga en cuenta que nos aseguramos de no borrar la tabla SchemaMigration.