restful rails ruby-on-rails ruby-on-rails-3 truncate rails-console

ruby-on-rails - restful - routes in ruby on rails



Truncar mesa(s) con consola de rieles (9)

(Un poco tarde para la fiesta, lo sé)

Pidiendo hacer esto en la consola:

2.1.2 :001 > Post.all.each do |post| 2.1.2 :002 > post.destroy! 2.1.2 :003 > end

Funciona también ...

Esto esencialmente recorre todas las publicaciones y las destruye. Sin embargo, no cambia el valor de incremento automático ...

La misma lógica debería funcionar también para Rails 3 (aunque estoy usando Rails 4)

Tengo esta base de datos de prueba que, por ahora, está llena de basura. Ahora he hecho algunos comandos Table.destroy_all en la consola de rails que elimina todos los registros y dependencias, lo que es asombroso. Sin embargo; Me gustaría truncar todo para que los ID, etc. comiencen en 1 nuevamente. ¿Hay alguna manera en Rails 3?


Esto funcionó para mí: ActiveRecord::Base.connection.execute("TRUNCATE table_name")


La respuesta aceptada solo funciona si necesita recrear toda la base de datos.
Para colocar una sola tabla (con las devoluciones de llamada) y para que los ID comiencen desde 1:

Model.destroy_all # Only necessary if you want to trigger callbacks. ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")

Si está utilizando Sqlite, no admite truncar, haga lo siguiente:

Model.destroy_all # Only necessary if you want to trigger callbacks. ActiveRecord::Base.connection.execute("Delete from #{table_name}") ActiveRecord::Base.connection.execute("DELETE FROM SQLITE_SEQUENCE WHERE name=''#{table_name}''")


Si desea truncar todo e iniciar una base de datos nueva con solo el esquema, haga lo siguiente:

RAILS_ENV=test rake db:schema:load

(Esto no activará las devoluciones de llamada del modelo ActiveRecord)


Simplemente reconstruya la base de datos en la siguiente ejecución de prueba (esto sucederá automáticamente después de descartarla).

rake db:drop RAILS_ENV=test


Suponiendo que está utilizando MySQL o Postgre y no SQlite3 (que no es compatible con TRUNCATE ), podría hacer lo siguiente:

MyModel.connection_pool.with_connection { |c| c.truncate(MyModel.table_name) }

Tenga en cuenta que esto no invocará las devoluciones de llamada de ActiveRecord.


También podría hacer rake db:rollback STEP=3 RAILS_ENV=test

donde 3 representa el número de migraciones que tiene en db / migrar. En el ejemplo: si tengo en

db/migrate 20140121065542_create_users.rb 20140121065710_create_profiles.rb 20140121065757_create_articles.rb 20140121065900_create_comments.rb 20140121065929_create_categories.rb

Entonces tengo 5 migraciones en total para eliminar. Si realizo rake db:rollback STEP=5 RAILS_ENV=test todas las tablas se eliminarán de mi base de datos TEST y si elimino rake db:rollback STEP=5 RAILS_ENV=test todas las tablas ENVIRONNMENT (producción, prueba, desarrollo) serán eliminadas y se limpiará también db /shema.rb archivo de sus datos de migración.


rake db:reset realizará rake db:drop db:setup . En otras palabras, suelte la base de datos y configure la base de datos nuevamente.

Source


Model.connection.truncate(Model.table_name)