2014-11-04 46 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)其中第一個不做任何回調,肯定快得多,而另一個實例化並執行所有回調。