我有
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
我该如何做到这一点?
答案 0 :(得分:24)
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])
编辑:for rails 3
MyObject.where(my_container_id: 10).delete_all
答案 1 :(得分:0)
其中一个或两个都应该有效:
MyContainer.find(10).my_objects.destroy_all
MyContainer.find(10).my_objects.each(&:destroy)
答案 2 :(得分:0)
您可以直接删除对象,如下所示
MyObject.delete_all(["my_container_id=?", 10])