Saturday, 15 January 2011

Rails console/pry shows ActiveRecord has_many/belongs_to references in invalid state? -


मेरे पास दो मॉडलों में एक काफी सरल है I_many / belongs_to संबंध:

  class उपयोगकर्ता & lt ; ActiveRecord :: बेस है has_many: प्राधिकरण, आश्रित:: नष्ट ... अंत वर्ग प्राधिकरण & lt; ActiveRecord :: बेस is_to: user ... end  

... सभी अच्छा।

लेकिन जब मेरे पास मौजूदा प्राधिकरण वाले उपयोगकर्ता हैं, और रेल का उपयोग कंसोल (ध्यान दें कि मैं वास्तव में एक pry मणि का उपयोग कर रहा हूं - क्या यह प्राइ-संबंधी हो सकता है?) किसी अन्य प्राधिकरण को कुछ अन्य प्राधिकरणों को फिर से असाइन करने के लिए, जैसे:

<पूर्व> & gt; Some_auth = user_b.authorizations.first & gt; User_a & lt; & lt; Some_auth & gt; Some_auth.user = user_a & gt; Some_auth.save

... तो मुझे स्वामित्व के अजीब विरोधाभासी राज्य मिलते हैं:

  & gt; User_b.authorizations.count = & gt; 0 & gt; User_b.authorizations.first = & gt; # & Lt; प्राधिकरण आईडी: 7, यूज़र_आईडी: 9, ... & gt; & Gt; User_b.authorizations.first.user_id = & gt; 9 & gt; User_a.authorizations.first.user = & gt; # & Lt; उपयोगकर्ता आईडी: 7, ... & gt;  

पूरी तरह से अजीब, सही?

अब, मुझे लगता है कि मुझे दोनों करने की ज़रूरत नहीं है

  & gt; User_a & lt; & lt; Some_auth  

और

  & gt; Some_auth.user = user_a  

... लेकिन मैं उस रिडंडेंसी से इस व्यवहार की अपेक्षा नहीं करूँगा!

क्या कोई मेरी मदद कर सकता है यह समझने में कि क्या गलत हो रहा है? < / P>

ध्यान दें कि जब मैंने रेल को कंसोल छोड़ दिया और इसे फिर से शुरू किया, तो समस्या दूर जा रही है ...

अपने केस को हल करने के लिए आप अपने प्राधिकरण वर्ग के साथ : inverse_of विकल्प का उपयोग करना चाह सकते हैं। यह जैसा_आ: प्रयोक्ता, व्युत्क्रम_ऑफः: प्राधिकरण की तरह दिखेगा - और फिर यह काम करेगा जैसे आप इसे करने की अपेक्षा करते हैं।

आप "सेटिंग व्युत्क्रम" खंड में और अधिक पढ़ सकते हैं।


No comments:

Post a Comment