ruby on rails - ActiveRecord object equality -


के डॉक्स के अनुसार:

== (comparison_object) true_to एक ही सटीक वस्तु, या comparison_object एक ही प्रकार का है और स्वयं के पास एक आईडी है और यह comparison_object.id के बराबर है।

ध्यान दें कि नए अभिलेख परिभाषा के द्वारा किसी अन्य रिकॉर्ड से अलग हैं, जब तक कि अन्य रिकॉर्ड न हो रिसीवर ही इसके अलावा, यदि आप चुनते हैं और आईडी को बाहर छोड़ दें, तो आप अपने खुद के साथ मौजूदा रिकॉर्ड प्राप्त करते हैं, तो यह विधेयक झूठी बदलेगा।

ध्यान दें कि रिकॉर्ड को नष्ट करने के मॉडल में अपनी पहचान को संरक्षित करता है उदाहरण के लिए, तो हटाए गए मॉडल अभी भी तुलनीय हैं।

लेकिन मेरी टिप्पणियों से पता चलता है कि यह केवल इंस्टासेस की तुलना करता है, आईडी नहीं है, ताकि निम्नलिखित सत्य हो:

  a = Factory.create (: उपयोगकर्ता) बी = User.find_by_email (a.email) # बी एक तार्किक रूप से a.id.should = = b.id # के रूप में समान है। # सभी अच्छा a.should == b # असफलता: दस्तावेज़ों का खंडन करता है .sould_not == b # डॉक्स a.should_not eql b # contradicts डॉक्स   

प्रश्न 2 एआर उदाहरणों को अलग माना जाता है जबकि डॉक्स स्पष्ट रूप से कहता है कि उनको समान होना चाहिए ?

अपडेट करें: समानता अपेक्षित काम करता है उपरोक्त कोड नमूना अप्रासंगिक है मेरा जवाब नीचे देखें

मेरे अपने प्रश्न का उत्तर देना (जो अप्रासंगिक है)।

सभी समानता जांच अपेक्षित काम करें (और डॉक्स में वर्णित है)।
मुझे लगता है कि यह मेरे लिए काम नहीं कर रहा है यह है कि मैं autotest चलाता हूं और कुछ कैश किया जा सकता है या कुछ अन्य पौराणिक कारण यह हो सकता है कि मैं अभी समझाएं।

संक्षेप में, सभी निम्नलिखित निष्ठा वास्तव में गुजर रहे हैं:

  a = फैक्टरी.क्रेते (: उपयोगकर्ता) b = User.find_by_email (a .email) # बी तार्किक रूप से एक a.id.should == बी.आईडी a.should == b a.should eql b के रूप में समान है User.find_by_email (a.email)। Should == User.find_by_email (a.email) ) A.should == User.find_by_email (a.email) b.should == User.find_by_email (a.email)    

Comments