2012-11-27 64 views
5

有沒有更快的方法來消滅所有的鐵軌?在Rails中做更高效的destroy_all方法?

我在問這個,因爲rails不會爲每個記錄刪除sql查詢。

例如調用destroy全部搜索4條記錄,然後運行4條刪除sql命令。

Blerg.where("created_at > yesterday").destroy_all (4 results) 

然後卡列斯...

DELETE FROM "blergs" WHERE "blergs"."id" = $1 [["id", 197782]] 

4倍。

有沒有辦法讓它進入一個sql命令?

回答

9

您可以撥打百達

Blerg.where("created_at > yesterday").delete_all 

這讓只有一個查詢:

DELETE FROM "blergs" WHERE (created_at > '2012-11-26 16:27:56.678872') 

注意,這不叫上要被刪除的對象的任何回調。

+3

回調是重要的一點。如果您有任何:dependent =>:destroy關係,它們也不會被刪除。 –

+0

是的,任何尋找這個答案的人都應該注意到沒有回調,這很重要。 – Smickie

1

你也可以做

Blerg.delete_all("created_at > '2012-11-01 00:00:00'") 

這是更簡潔。它執行一條SQL語句。