Rails,删除子项而不删除父项使用:has_many

时间:2010-04-20 07:04:56

标签: ruby-on-rails children has-many

我有

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

我该如何做到这一点?

3 个答案:

答案 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])
相关问题