2012-11-27 10 views
5

रेल में सभी को नष्ट करने का एक तेज तरीका है?रेल में dest_all करने का अधिक कुशल तरीका?

मैं यह पूछ रहा हूं क्योंकि रेल प्रति व्यक्ति एसक्यूएल क्वेरी प्रति रिकॉर्ड हटा देता है।

उदाहरण के लिए कॉलिंग 4 रिकॉर्ड्स की खोज पर सभी को नष्ट कर देगा तो 4 हटाए गए एसक्यूएल कमांड चलाएंगे।

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

तो कैलेस ...

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

4 बार।

क्या इसे एक एसक्यूएल कमांड में लाने का कोई तरीका है?

उत्तर

9

आप allways

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

कॉल कर सकते हैं यह केवल एक क्वेरी देता है:

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

ध्यान दें कि यह वस्तुओं जो हटाया जाने वाला है पर किसी भी कॉलबैक फोन नहीं करता है।

+3

कॉलबैक एक महत्वपूर्ण बात है। यदि आपके पास कोई है: निर्भर =>: शामिल संबंधों को नष्ट कर दें, वे भी हटाए नहीं जाएंगे। –

+0

हाँ, इस उत्तर की तलाश में कोई भी कॉलबैक नहीं लेना चाहिए, यह बहुत महत्वपूर्ण है। – Smickie

1

तुम भी

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

जो और अधिक संक्षिप्त है कर सकते हैं। यह एक एसक्यूएल कथन निष्पादित करता है।

संबंधित मुद्दे