ruby on rails - Automatically create relationship unless it already exists -
कक्षा कैट & lt; ActiveRecord :: बेस है has_many: catbowls है has_many: कटोरे, के माध्यम से:: catbowls अंत वर्ग CatBowl & lt; ActiveRecord :: बेस is_to: बिल्लियों belong_to: कटोरे के अंत वर्ग बाउल & lt; ActiveRecord :: बेस has_many: catbowls has_many: बिल्लियों, के माध्यम से: अंत catbowls रेल कंसोल में मैं एक बिल्ली के लिए एक कटोरा दे सकते हैं:
बिल्ली = बिल्ली। बनाएं (नाम: 'टिब्ब्ल्स') कटोरा = बाउल। बनाएं (रंग: 'नीला') cat.catbowls # = & gt; [] Cat.catbowls.create (bowl_id: bowl.id) cat.catbowls # = & gt; [# & Lt; बाउल आईडी: 1, रंग: "नीला", बनाया गया_आट: "2014-04-23 22:53:15", अपडेट किया गया_आइट: "2014-04-23 22:53:15" & gt;] यह समझ में आता है, और निम्नलिखित सहयोग मौजूद हैं:
CatBowl.all # = & gt; [# & Lt; Bowl id: 1, cat_id: 1, bowl_id: 1 & gt;] हालांकि, यह मेरी समस्या है अगर मैं फिर से एसोसिएशन बनाऊं, तो यह वास्तव में नतीजे बदल नहीं सकता है, लेकिन मुझे एक अप्रभावी समान कैटबोवल रिश्ते मिले। cat.catbowls.create (bowl_id: bowl.id) cat.catbowls # = & gt; [# & Lt; बाउल आईडी: 1, रंग: "नीला", बनाया गया_आट: "2014-04-23 22:53:15", अपडेट किया गया: "2014-04-23 22:53:15" & gt;] & gt; यह रिश्ता पिछले एक के समान है और पूरी तरह बेकार है:
CatBowl.all # = & gt; [# & LT; बाउल आईडी: 1, cat_id: 1, bowl_id: 1 & gt;, # & LT; बाउल आईडी: 2, cat_id: 1, bowl_id: 1 & gt;] तो मैं कैसे कर सकते हैं बनाया जा रहा से एक मौजूदा संबंध बंद करो? cat.catbowls.create को बदलने के लिए क्या विधि श्रृंखला का उपयोग किया जाना चाहिए, और कोई संबंध बनाना जब तक यह पहले से मौजूद नहीं है? मैं तब तक इसका उपयोग नहीं कर सकता जब तक कि ऐसा करने के लिए,
cat.catbowls.create (bowl_id: bowl.id) जब तक Catbowl.where (cat_id: cat.id, bowl_id: bowl.id) .present? हालांकि यह काफी जटिल है और बहुत सारे प्रश्नों में इसका परिणाम है। मैं क्या करना चाहता हूं इतना आम है कि मैं सोच रहा हूं कि कुछ रेल जादू मेरी मदद कर सकता है?
itemprop = "text"> पहली बार बिल्लियों और कटोरे के लिए 'क्लास कैटबॉवल & lt; ActiveRecord :: बेस is_to: cat is_to: bowl end
फिर पुल प्रविष्टि बनाएं
cat.bowls & lt; & lt; कटोरा लेकिन यह पुनरावृत्ति को रोक नहीं सकता है। शर्तों के साथ पुनरावृत्ति को रोकने के लिए संभाल
हालत हो सकता है पसंद: <कोड> (cat.bowls.find_by (आईडी: bowl.id) || cat.bowls & lt; & lt; कटोरा) रेल 4 अगर (cat.bowls.find_by_id (bowl.id) || cat.bowls & lt; & lt; कटोरा) करता है, तो रेल 3
Comments
Post a Comment