आप 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.destroyUser.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...आदेश जारी करेगा ।