0
我在解決如何快速銷燬數千條記錄的問題。DELETE FROM table WHERE myfield = 1(ActiveRecord)
我有一個名爲ITEM的模型。它:
has_many :pictures (up_to 20)
has_many :ads (up to 10)
has_many :views (up_to 5000-8000)
has_many :posts (up to 100-200)
當用戶摧毀他的物品 - 所有的孩子都需要消失。
所以我什麼都試過了我能找到,但所有的解決方案基於ID進行查詢:
:dependant => :destroy // makes a query per each item
***
before_destroy :destroy_children
private
def destroy_children
pictures.delete_all
ads.destroy_all
views.destroy_all
posts.destroy_all
end
// same
我目前的解決辦法是這樣的:
class Item << ActiveRecord:Base
has_many :pictures, :dependent => :destroy
before_destroy :destroy_children
private
def destroy_children
pictures.destroy_all
Ad.delete(self.ads.collect{|x| x.id})
Post.delete(self.ads.collect{|x| x.id})
View.delete(self.ads.collect{|x| x.id})
end
end
基本上,它獲取ID的數組所有視圖都屬於該項目,然後生成如下這樣的大IN語句:
DELETE FROM Views WHERE id IN (2, 3, 6, 8, 35, 50...)
如果我的IN數組已經說了幾千個ID,那麼這仍然太重了。
有沒有辦法產生這個查詢?
DELETE FROM Views WHERE item_id = 4
也許是這樣的?
View.delete(:item_id => 2)
// it doesn't work, but maybe something like this exists
很奇怪,我在任何地方都找不到這樣的東西。