2009-12-07 42 views
1

我想清楚的表在我railsapp,没有删除数据库和迁移...为什么不MyModel.all.each {| m | m.destroy}按预期工作?

MyModel.all.each{|m| m.destroy} 

我希望这个代码删除my_model表中的每个记录,但这是不会发生... 使用Rails 2.3.4 + MySQL 5.1中

编辑: 问题是基于插件better_nested_set这并没有让我删除的条目依次

MyModel.delete_all工作,另一方面,也许是因为它执行截断(?)

+1

我知道没有理由,为什么不行。我只用表中的一些数据对它进行了测试,结果非常好。约翰·托普利所说的是正确的,这是一个更好的方法,但你的工作也应该如此。我想我会分解它,并确保每一步工作。也就是说,“MyModel.all”会返回你期望的结果吗?并且“MyModel.all.each {| m | <关于每个项目打印出某些东西>}”工作吗?那么你可以做一个“list = MyModel.all”和“list [0] .destroy”的工作吗? – 2009-12-07 20:25:06

+0

John是对的,如果你看看'destroy_all'的源码,那么它的功能就差不多了:http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002274 – 2009-12-08 09:48:29

+0

我发现我在数据库中有一些依赖关系,并且删除没有级联正确的 – 2010-02-11 09:03:46

回答

5

使用MyModel.destroy_all删除模型的所有记录。

+0

快速和有用的答案,谢谢 – 2009-12-07 20:22:27

+0

唯一的警告是,如果您使用回调(before_destroy,after_destroy等)做任何事情,这将绕过他们。否则,它会做你想做的事情,比在每个实例上调用destroy更快。 – semanticart 2009-12-08 02:15:47

+2

这完全错了,semanticart!它是绕过回调的'delete_all'方法。 – 2009-12-08 07:21:43

相关问题