Я имею
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
Как я могу выполнить это?
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])
EDIT: для рельсов 3
MyObject.where(my_container_id: 10).delete_all
Вы можете удалять объекты напрямую, как показано ниже
MyObject.delete_all(["my_container_id=?", 10])
Один или оба из них должны работать:
MyContainer.find(10).my_objects.destroy_all
MyContainer.find(10).my_objects.each(&:destroy)