2010-09-09 35 views

Respuesta

25

Para un verdadero TRUNCATE, puede usar execute para ejecutar el SQL sin formato.

ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{table_name}") 

Sus ejemplos usando modelos no estaban haciendo verdaderos TRUNCATE consultas.

  • destroy_all no TRUNCATE a table. "Destruye las condiciones de coincidencia de registros instanciando cada registro y llamando a su método de destrucción" (link).
  • delete_all está más cerca - ignora las devoluciones de llamada - pero todavía no es TRUNCATE.

Al utilizar el método execute se eliminan las filas de la base de datos sin crear ninguna instancia de modelo.

Además, un TRUNCATE consulta real, al menos en MySQL, se restablecerá el incremento automático en la clave principal, por lo que el siguiente registro se inserta tendrá Identificación de 1.

0

Supongo que su tabla de unión se llama categories_posts. CategoryPost.destroy_all debería funcionar, si no, tal vez usted tiene que especificar el nombre de la tabla en el modelo (CategoryPost)

set_table_name "categories_posts" 

actualización, no hay un modelo CategoryPost, por lo que debe ser creado:

class CategoryPost < ActiveRecord::Base 
    set_table_name "categories_posts" 
end 
+0

unir tablas no tienen una modelo asociado. por ejemplo, 'CategoryPost' –

+0

puede crearlo – jordinl

Cuestiones relacionadas