如何从我的数据库中删除Rails中的id /对象数组?

时间:2014-11-04 03:17:12

标签: ruby-on-rails arrays rails-activerecord

我知道可以做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来电。我应该这样做并将其包装在交易中吗?还有更好的方法吗?

更新:我想出来并在下面写了一个答案。

2 个答案:

答案 0 :(得分:8)

嗯,这太傻了。事实证明我可以做到:

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

答案 1 :(得分:3)

如果您要打电话给destroy_all,您也可以自己循环播放,因为这就是该方法本身所做的事情(为了处理任何回调)。

如果您要删除它们,那么这应该有效:

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