2010-09-09 66 views

回答

25

对于真实的TRUNCATE,可以使用execute来运行原始SQL。

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

您使用模型的示例没有执行真正的TRUNCATE查询。

  • destroy_all不是TRUNCATE的表格。它“通过实例化每条记录并调用其销毁方法来破坏匹配条件的记录”(link)。
  • delete_all更接近 - 它忽略回调 - 但仍然不是TRUNCATE

使用execute方法删除数据库中的行而不创建任何模型实例。

而且,实际TRUNCATE查询,至少在MySQL,将重新设置主键自动递增,让你插入的下一个记录将有1

0

我想你的连接表叫做categories_posts。 CategoryPost.destroy_all应该工作,如果没有,也许你需要在模型中指定表名(CategoryPost)

set_table_name "categories_posts" 

更新,还没有一个CategoryPost模型,所以应该创建:

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

ID连接的表没有一个关联模型。例如'CategoryPost' – 2010-09-09 09:59:30

+0

您可以创建它 – jordinl 2010-09-09 10:11:09