2010-10-19 13 views
10

जब मैं 2 वस्तुओं एक सौदेरेल लेनदेन: क्या यह ActiveRecord मॉडल वर्ग पर महत्वपूर्ण है?

a = A.new(...) 
b = B.new(...) 

इससे कोई फर्क पड़ता है कि कौन सा मॉडल वर्ग पर मैं लेनदेन विधि आह्वान अंदर को बचाने के लिए है?

A.transaction do 
    a.save 
    b.save 
end 

या

B.transaction do 
    a.save 
    b.save 
end 

IMNO दोनों, एक ही डाटाबेस लेनदेन उपयोग करें, क्योंकि ActiveRecord केवल एक कनेक्शन संभाल कर सकते हैं इस प्रकार यह कोई फर्क नहीं करना चाहिए। क्या वो सही है?

धन्यवाद, एलेक्स।

उत्तर

8

हाँ, आपके द्वारा दी गई दोनों वर्गों में एक ही डेटाबेस कनेक्शन का उपयोग सही हैं। एक अलग डेटाबेस से कनेक्ट करने के लिए कक्षा के लिए establish_connection का उपयोग करना संभव है लेकिन आप जान लेंगे कि आप ऐसा कर रहे हैं या नहीं। इसलिए, जैसा कि आप सही ढंग से A.transaction या B.transaction का उपयोग करने का सुझाव देते हैं ठीक है।

अगर वे विभिन्न डेटाबेस आप घोंसला सकता है लेन-देन कॉल उपयोग कर रहे थे:

A.transaction do 
    B.transaction do 
    ... 
    end 
end 

लेकिन यह है कि इस मामले में आवश्यक नहीं है।

7

बिल्कुल सही। Rails API docs से:

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

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