2014-11-04 31 views
1

我明白一个人可以做类似Model.destroy_all(status: "inactive")。我希望我的情况很简单,但我不能那样做。我有一个加密的字符串列,通过attr_encrypted gem映射到一个整数数组,这使得这个麻烦。如何从我的数据库中删除Rails中的ID /对象数组?

基本上,我有这样一个数组: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

你可以做'Model.destroy_all(id:array.map(&:id))'。我相信它比'Model.destroy(array)'更好的优化。 – hlcs 2017-06-30 16:12:10

回答

1

如果你打电话给destroy_all你可能会自己循环它们,因为这是该方法本身(为了处理任何回调)。

如果你要删除它们虽然那么这应该工作:

Model.where(id: array.map(&:id)).delete_all 
4

那么,这是愚蠢的。原来我可以这样做:

Model.delete(array)Model.destroy(array)其中第一个不做任何回调,肯定快得多,而另一个实例化并执行所有回调。

相关问题