8

私は持っている

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

どうすればこれを達成できますか?

4

3 に答える 3

27

delete_allActiveRecord::Baseクラスメソッドです。

を使用する必要がありますdestroy_all。何かのようなもの:

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

delete_all最初にルックアップする必要がない場合MyContainer(または他のものに使用する場合) 、適切に使用する方が高速です

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

編集:レール3の場合

MyObject.where(my_container_id: 10).delete_all
于 2010-04-20T07:10:18.557 に答える
0

次のようにオブジェクトを直接削除できます

MyObject.delete_all(["my_container_id=?", 10])
于 2010-04-20T07:14:09.143 に答える
0

これらのいずれかまたは両方が機能するはずです。

MyContainer.find(10).my_objects.destroy_all

MyContainer.find(10).my_objects.each(&:destroy)
于 2010-04-20T07:08:53.943 に答える