खोज…


परिचय

ActiveRecord लेन-देन सुरक्षात्मक ब्लॉक हैं जहां सक्रिय रिकॉर्ड प्रश्नों का अनुक्रम केवल स्थायी है अगर वे सभी एक परमाणु कार्रवाई के रूप में सफल हो सकते हैं।

सक्रिय रिकॉर्ड लेनदेन के साथ शुरू करना

सक्रिय रिकॉर्ड लेनदेन मॉडल वर्गों के साथ-साथ मॉडल उदाहरणों पर भी लागू किया जा सकता है, लेन-देन ब्लॉक के भीतर की वस्तुओं को सभी एक ही वर्ग के उदाहरण नहीं होने चाहिए। ऐसा इसलिए है क्योंकि लेनदेन प्रति-डेटाबेस कनेक्शन हैं, प्रति मॉडल नहीं। उदाहरण के लिए:

User.transaction do
  account.save!
  profile.save!
  print "All saves success, returning 1"
  return 1
end
rescue_from ActiveRecord::RecordInvalid do |exception|
  print "Exception thrown, transaction rolledback"
  render_error "failure", exception.record.errors.full_messages.to_sentence
end

एक धमाके के साथ बचत का उपयोग करना सुनिश्चित करता है कि अपवाद को फेंकने पर लेनदेन स्वचालित रूप से वापस हो जाएगा और रोलबैक के बाद, नियंत्रण अपवाद के लिए बचाव खंड में जाता है। सुनिश्चित करें कि आप बचाओ से फेंक दिए गए अपवादों को बचाते हैं! लेन-देन ब्लॉक में।

यदि आप save का उपयोग नहीं करना चाहते हैं!, तो आप मैन्युअल रूप से raise ActiveRecord::Rollback बढ़ा सकते हैं raise ActiveRecord::Rollback जब बचत विफल हो जाती है तो raise ActiveRecord::Rollback । आपको इस अपवाद को संभालने की आवश्यकता नहीं है। यह तब लेन-देन को रोलबैक करेगा और ट्रांजेक्शन ब्लॉक के बाद अगले स्टेटमेंट पर नियंत्रण रखेगा।

   User.transaction do
      if account.save && profile.save
        print "All saves success, returning 1"
        return 1
      else
        raise ActiveRecord::Rollback
      end
    end
    print "Transaction Rolled Back"


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow