Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails, Deleting Children without Deleting Parent using :has_many

I have

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

I want to delete all the MyObjects in the container without having to delete the MyContainer. My model does have :dependent => :destroy, however I don't want to have to delete and re-create the object because it is slower.

Something like this does not work:

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

How can I accomplish this?

like image 889
Dex Avatar asked Apr 20 '10 07:04

Dex


1 Answers

delete_all is an ActiveRecord::Base class method.

You should use destroy_all. Something like:

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

Using delete_all properly would be faster if you don't need to lookup your MyContainer first (or use it for other stuff)

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

EDIT: for rails 3

MyObject.where(my_container_id: 10).delete_all
like image 100
maček Avatar answered Oct 21 '22 09:10

maček