2015-01-08 6 views
6

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

class Player < ActiveRecord::Base; end 
class CollegePlayer < Player; end 
class ProPlayer < Player; end 

जहां कोई खिलाड़ी कॉलेजप्लेयर और प्रोप्लेयर दोनों या दोनों हो सकता है। या फिर एक और उदाहरण में ...

class Person < ActiveRecord::Base; end 
class User < Person; end 
class Player < Person; end 
class Coach < Person; end 

जहां एक "व्यक्ति" एक User, पूर्वPlayer, और/या Coach हो सकता है।

+1

मुझे" कॉलेज प्लेयर "जैसी चीज़ें देखने की ज़रूरत होती है जैसे खिलाड़ी कुछ करता है (या उनकी भूमिका पूरा करें) उनकी पहचान के एक हिस्से के बजाय। इसी तरह, यदि आपके पास कोई व्यक्ति है, तो उस व्यक्ति के अंतर्निहित गुणों की बजाय "खिलाड़ी" और "कोच" भूमिकाएं हैं। मुझे लगता है कि आपका मॉडल सेटअप "सचमुच" धारणा बहुत सचमुच लेता है। –

+0

@muistooshort आप शायद सही हैं, मैं बस अतिरिक्त जानकारी के रूप में प्रदान कर रहा था। मैं मुख्य रूप से पूछ रहा हूं कि सक्रिय रिकॉर्ड में एकाधिक टेबल विरासत समर्थन क्यों नहीं है। – daveomcd

उत्तर

1

आपके प्रश्न का यह संक्षिप्त उत्तर यह है क्योंकि ActiveRecord कोर टीम समुदाय से पर्याप्त मांग के साथ इस सुविधा को शामिल नहीं करना चाहती है। देखें https://github.com/rails/rails/issues/5541

यदि आप निश्चित उत्तर चाहते हैं तो आपको DHH (david.heinemeierhansson.com) या हारून टेंडर लव पैटरसन ([email protected]) से पूछना होगा क्योंकि वे सक्रिय रिकॉर्ड प्रोजेक्ट पर "अग्रणी" योगदानकर्ता हैं ।

मेरा व्यक्तिगत उत्तर इसलिए है क्योंकि सक्रिय रिकॉर्ड पहले से ही जटिल है। ActiveRecord के लिए पहले से समर्थित सुविधाओं का समर्थन करने के लिए मेटा प्रोग्रामिंग की मात्रा पहले से ही समर्थन और विस्तार करने के लिए थोड़ा चुनौतीपूर्ण है। वर्तमान में एआर पर काम कर रही कोर टीम संगठन को साफ करने के लिए तेजी से काम करने और इसे पुन: सक्रिय करने के लिए एआर को और अनुकूलित करने में काफी ध्यान केंद्रित कर रही है। यह देखते हुए कि विरासत जैसे कई टेबल प्राप्त करने के पहले से ही विकल्प हैं और समुदाय इस सुविधा के लिए प्राथमिकता से कम नहीं है।

हालांकि आप की सत्यता डीबी संगठन मैं muistooshort यह आप की तरह लगता है पूरा कर सकते हैं कि आप क्या भूमिकाओं के साथ चाहते हैं के साथ सहमत के बारे में अपने अन्य प्रश्न पर टिप्पणी करने से। जब मैं पहली बार सी ++ से आ रहा था, मैंने विभिन्न वस्तुओं के लिए अलग-अलग मॉडल बनाने की कोशिश की और कुछ प्रकार की घिरा हुआ विरासत योजना का पालन करने की दृढ़ आवश्यकता महसूस की। तुम बस के रूप में आप एप्लिकेशन खड़ा है अपने आप से पूछना करने की जरूरत है अब व्यवहार में अंतर इन प्रकार है कि यह भेदभाव के इस डिग्री को सही ठहराते हैं के बीच बहुत अलग है (सड़क क्योंकि इस समय तक thats अटकलें नीचे नहीं)।

संपादित

मैं Thoughtbot के शॉन ग्रिफिन जो सक्रिय रिकॉर्ड पर काम करता है के साथ बात की और मैंने उससे पूछा क्यों कई तालिका विरासत का समर्थन नहीं किया गया था उसकी प्रतिक्रिया थी:

"बहुरूपी संघों को भरने अधिकांश उपयोग मामलों के लिए यह भूमिका "

+0

हाय! मैंने आपके उत्तर के अनुसार नया धागा शुरू कर दिया है http://stackoverflow.com/questions/40073707/polymorphic-associations-can-be-used-for-mti-implementation शायद, आपके पास – okliv

+0

कहने के लिए कुछ है, मैं इसे देख लूंगा –

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