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

Dex*_*Dex 7 children ruby-on-rails has-many

我有

class MyContainer < ActiveRecord::Base
  :has_many MyObjects, :dependent => :destroy
end
Run Code Online (Sandbox Code Playgroud)

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

这样的东西不起作用:

@obj = MyContainer.find_by_id(10)
@obj.my_objects.delete_all
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

mač*_*ček 25

delete_all是一种ActiveRecord::Base类方法.

你应该用destroy_all.就像是:

@container = MyContainer.find_by_id(10)
@container.my_objects.destroy_all
Run Code Online (Sandbox Code Playgroud)

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

MyObject.delete_all(["my_container_id = ?", 10])
Run Code Online (Sandbox Code Playgroud)

编辑:对于rails 3

MyObject.where(my_container_id: 10).delete_all
Run Code Online (Sandbox Code Playgroud)