8

我有

class MyContainer < ActiveRecord::Base
  :has_many MyObjects, :dependent => :destroy
end

我想删除MyObjects容器中的所有内容,而不必删除MyContainer. 我的模型确实有:dependent => :destroy,但是我不想删除并重新创建对象,因为它比较慢。

像这样的东西不起作用:

@obj = MyContainer.find_by_id(10)
@obj.my_objects.delete_all

我怎样才能做到这一点?

4

3 回答 3

27

delete_all是一个ActiveRecord::Base类方法。

你应该使用destroy_all. 就像是:

@container = MyContainer.find_by_id(10)
@container.my_objects.destroy_all

delete_all如果您不需要首先查找MyContainer(或将其用于其他东西),正确使用会更快

MyObject.delete_all(["my_container_id = ?", 10])

编辑:对于导轨 3

MyObject.where(my_container_id: 10).delete_all
于 2010-04-20T07:10:18.557 回答
0

这些之一或两者都应该起作用:

MyContainer.find(10).my_objects.destroy_all

MyContainer.find(10).my_objects.each(&:destroy)
于 2010-04-20T07:08:53.943 回答
0

您可以像下面这样直接删除对象

MyObject.delete_all(["my_container_id=?", 10])
于 2010-04-20T07:14:09.143 回答