Tengo este testingdatabase que, por ahora, está lleno de basura. Ahora he hecho un par de la Tabla.destroy_all comandos en la consola de rails, que elimina todos los registros y dependencias, que es increíble. Sin embargo, me gustaría truncar todo, por lo que la IDENTIFICACIÓN del etc. empieza a la 1 de nuevo. ¿Hay alguna forma en Rails 3?

InformationsquelleAutor CaptainCarl | 2012-11-01

8 Comentarios

  1. 129

    La aceptó responder sólo funciona si usted necesita volver a crear toda la base de datos.

    Para quitar una sola tabla (con las devoluciones de llamada) y para obtener un número de identificación a partir del 1 de:

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

    Si usted está usando Sqlite, no admite trunca del siguiente modo:

    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}'")
    • Su respuesta es correcta cuando una tabla debe ser truncado (Y se los agradezco) he elegido Ñame Marcovic respuesta como el aceptado contestar porque me hizo preguntar por «todo» para ser truncado.
    • Gracias por el voto. Toda la base de datos requisito no estaba claro a partir de la pregunta ! Sólo por la información, rake db:caída de la gota de la base de datos. Si el requisito es sólo truncar todas las tablas, u puede ejecutar ActiveRecord::Base.conexión.tablas.collect{|table_name| ActiveRecord::Base.conexión.execute(«TRUNCAR #{table_name}»)}. A pesar de que no podría tomar el cuidado de las devoluciones de llamada, supongo que no es necesario ya que estamos truncar todas las tablas.
    • destroy_all llamará a destruir en cada registro, que es muy diferente a la de truncar la tabla. Desde google Docs: # Destruye los registros que coinciden con +condiciones+ mediante la creación de instancias de cada # de registro y llamando a su +destruir+ método. Cada objeto devoluciones de llamada # ejecutado (incluyendo <tt>:dependiente de la</tt> de la asociación de opciones y # +before_destroy+/+after_destroy+ métodos de Observador). Vuelve la # colección de objetos que fueron destruidos; cada uno será congelado, para # reflejan que no deben hacerse cambios (ya que no puede ser # persistió).
    • En Postgres, el 2 de comandos en realidad no restablecer el auto incremento de valor para la columna ID. Por eso, usted necesita para «TRUNCAR table_name REINICIAR la IDENTIDAD»). Consulte stackoverflow.com/a/7610991/271454
    • Solo para aclarar: Para MySQL/MariaDB: ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}") Para PostgreSQL: ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")
  2. 12

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

    • Sin embargo, la mejor y más sencilla respuesta
  3. 2

    Simplemente reconstruir la base de datos en la siguiente ejecución de la prueba (esto ocurrirá automáticamente después de caer).

    rake db:drop RAILS_ENV=test

  4. 2

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

    donde 3 representa el número de migraciones que tienen en db/migrate. 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

    Así que tengo 5 las migraciones en total a quitar. Si hago rake db:rollback STEP=5 RAILS_ENV=test todas las tablas será gota de mi base de datos de PRUEBA y si me retire RAILS_ENV=prueba de que todos los ENVIRONNMENT (producción, prueba y desarrollo) de las tablas se elimina y limpia también db/sema.rb archivo de migración de datos.

  5. 1

    rake db:reset llevará a cabo rake db:drop db:setup. En otras palabras, la caída de la base de datos y la configuración de la base de datos de nuevo.

    Fuente

    • haciendo esto, nos será de perder DATOS importantes, muy recomendable.
    • La pregunta original era acerca de cómo eliminar todos los datos en la base de datos.
    • La pregunta original se titula «Truncate table(s) con la consola de rails» — quitar o reajustar toda la base de datos puede no ser el deseado.
  6. 1

    Asumiendo que usted está utilizando MySQL o Postgre y no SQlite3 (que no admite TRUNCATE), se podría hacer lo siguiente:

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

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

  7. -5

    (Un poco tarde a 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 así…

    Esto, en esencia, un bucle a través de todos los puestos de trabajo y los destruye. No cambia su auto valor de incremento, aunque…

    Misma lógica debe trabajar para Rails 3 así (aunque yo estoy usando Rails 4)

    • 1. No utilice each, uso find_each. Se asegura de que usted willn’t ponen mil millones de registros de una consulta 2. No utilice el bucle, si sólo necesita eliminar los registros de la bd (sin ejecutar las devoluciones de llamada). Acaba de hacer Post.delete_all
    • original post fue acerca de cómo restablecer la indexación de auto a cero (truncate) tabla de base de datos usando rails. esta respuesta sólo elimina los registros
    • 1. Esto podría tomar horas para hacer como borrar el registro por registro. 2. Este será sin restablecer las secuencias en SQL, 3. todos.cada uno se va a cargar todos los mensajes a la memoria… así que si tienes millones de registros que puede cill su rendimiento de la aplicación

Dejar respuesta

Please enter your comment!
Please enter your name here