Направляющие, Удаляя Дочерние элементы, Не Удаляя Родительское использование: 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

Как я могу выполнить это?

7
задан maček 11 January 2013 в 16:02
поделиться

3 ответа

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
25
ответ дан 6 December 2019 в 07:05
поделиться

Вы можете удалять объекты напрямую, как показано ниже

MyObject.delete_all(["my_container_id=?", 10])
0
ответ дан 6 December 2019 в 07:05
поделиться

Один или оба из них должны работать:

MyContainer.find(10).my_objects.destroy_all

MyContainer.find(10).my_objects.each(&:destroy)
0
ответ дан 6 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: