我知道可以做Model.destroy_all(status: "inactive")
之类的事情。我希望我的案子很简单,但我不能这样做。我有一个加密的字符串列,它通过attr_encrypted gem映射到一个整数数组,这使得这很麻烦。
基本上,我有一个这样的数组:array = [object1, object2, object3, object4]
其中每个对象都是模型对象。
我希望能够执行Model.destroy_all(array)
或Model.delete_all(array)
之类的操作,但我无法执行此操作。
我甚至尝试过以下操作:Model.destroy_all(array.map(&:id))
和Model.delete_all(array.map(&:id))
,我无法成功删除它们。
我希望尽可能高效,我不认为array.map(&:destroy)
或array.map(&:delete)
会有效,因为我会N
来电。我应该这样做并将其包装在交易中吗?还有更好的方法吗?
更新:我想出来并在下面写了一个答案。
答案 0 :(得分:8)
Model.delete(array)
或Model.destroy(array)
,其中第一个没有做任何回调,并且肯定要快得多,而另一个实例化并执行所有回调。
答案 1 :(得分:3)
如果您要打电话给destroy_all
,您也可以自己循环播放,因为这就是该方法本身所做的事情(为了处理任何回调)。
如果您要删除它们,那么这应该有效:
Model.where(id: array.map(&:id)).delete_all