आप ActiveRecord ऑब्जेक्ट को कैसे हटाते हैं?
मैंने एक्टिव रिकॉर्ड क्वेरिंग को देखा और इसे डिलीट करने पर कुछ भी नहीं है जो मैं देख सकता हूं।
द्वारा हटाएं
id
,वर्तमान वस्तु की तरह हटाएँ:
user.remove
,क्या आप एक
where
खंड के आधार पर हटा सकते हैं ?
आप ActiveRecord ऑब्जेक्ट को कैसे हटाते हैं?
मैंने एक्टिव रिकॉर्ड क्वेरिंग को देखा और इसे डिलीट करने पर कुछ भी नहीं है जो मैं देख सकता हूं।
द्वारा हटाएं id
,
वर्तमान वस्तु की तरह हटाएँ: user.remove
,
क्या आप एक where
खंड के आधार पर हटा सकते हैं ?
जवाबों:
यह destroy
और destroy_all
तरीके हैं, जैसे
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
वैकल्पिक रूप से आप उपयोग कर सकते हैं delete
और delete_all
जो लागू नहीं करेगा :before_destroy
और :after_destroy
कॉलबैक या किसी आश्रित एसोसिएशन विकल्प।
User.delete_all(condition: 'value')
आपको प्राथमिक कुंजी के बिना रिकॉर्ड को हटाने की अनुमति देगा
नोट : @ हम्मीर की टिप्पणी से, user.destroy
यदि उपयोगकर्ता मॉडल में कोई प्राथमिक कुंजी नहीं है तो काम नहीं करेगा।
नोट 2 : @ pavel-chuchuva की टिप्पणी से, destroy_all
शर्तों के delete_all
साथ और स्थितियों के साथ रेल 5.1 में पदावनत कर दिया गया है - मार्गदर्शक देखें। rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob")
भी नष्ट या नष्ट करने के लिए रिकॉर्ड की पहचान करने के लिए अच्छा है।
नहीं है delete
, delete_all
, destroy
, और destroy_all
।
डॉक्स हैं: पुराने डॉक्स और रेल 3.0.0 डॉक्स
delete
वस्तुओं को त्वरित नहीं करता है, जबकि destroy
करता है। सामान्य तौर पर, delete
की तुलना में तेज है destroy
।
delete
तेज है, लेकिन आपके द्वारा मॉडल पर परिभाषित कॉलबैक को दरकिनार कर देगा
User.destroy
User.destroy(1)
id == 1
और :before_destroy
और :after_destroy
कॉलबैक के साथ उपयोगकर्ता को हटा देगा । उदाहरण के लिए यदि आपके पास संबंधित रिकॉर्ड हैं
has_many :addresses, :dependent => :destroy
उपयोगकर्ता के नष्ट होने के बाद उसके पते भी नष्ट कर दिए जाएंगे। यदि आप इसके बजाय डिलीट एक्शन का उपयोग करते हैं, तो कॉलबैक नहीं होंगे।
User.destroy
, User.delete
User.destroy_all(<conditions>)
या User.delete_all(<conditions>)
सूचना : उपयोगकर्ता एक वर्ग है और उपयोगकर्ता एक उदाहरण वस्तु है
User.destroy_all()
कॉलबैक चलाता है, इसलिए कुछ भी हटाने से पहले, यह रिकॉर्ड लोड करता है। यह दो एसक्यूएल बयान एक नहीं है। प्रदर्शन निहितार्थ के अलावा, यह समवर्ती निहितार्थ भी है। सुरक्षित कॉल स्किप कॉलबैक; User.delete_all()
केवल एक DELETE FROM...
आदेश जारी करेगा ।