2010-08-17 14 views
13

मैं वर्तमान में एक रेल 3 एप्लिकेशन पर काम कर रहा हूं जो ऐसा लगता है कि इसे कुछ मॉडलों के लिए कक्षा तालिका विरासत का उपयोग करने की आवश्यकता हो सकती है।रेल में कक्षा तालिका विरासत 3

यह क्या हो रहा है इसका एक सरल उदाहरण यह है।

मेरे पास नाम, ईमेल, पासवर्ड जैसे सामान्य गुणों वाला व्यक्ति है जिसे एप्लिकेशन में सभी प्रकार के लोगों के लिए आम है और प्रमाणीकरण के लिए उपयोग किया जाता है।

व्यक्ति (या दो प्रकार के लोग ...), चालक और यात्री के लिए दो उप-वर्ग हैं। इन दोनों उप-वर्गों में व्यक्ति के सामान्य गुण साझा होते हैं लेकिन फिर विशिष्ट अतिरिक्त विशेषताओं को स्वयं के लिए अद्वितीय होते हैं। (उदाहरण के लिए एक चालक के पास कई वाहन और लाइसेंस हो सकते हैं लेकिन एक यात्री नहीं होगा)

मैं इस तरह की स्थिति के लिए सीटीआई कैसे कार्यान्वित करूं? मैं यहाँ प्रदान की एक उदाहरण को देखकर किया गया है:

http://rhnh.net/2010/08/15/class-table-inheritance-and-eager-loading

लेकिन यह कैसे एक ड्राइवर या यात्री वस्तु से एक व्यक्ति की सामान्य विशेषताएं उपयोग करने के लिए पर अटकलें नहीं है और मैं थोड़ा से उलझन में हूँ उस।

विशेष रूप से, क्या मुझे पता करना चाहते हैं:

मैं एक चालक की विशेषताओं को अद्यतन करने कर रहा हूँ, तो मैं कैसे आसानी से माता पिता लोग मेज पर प्रासंगिक विशेषताओं तक पहुंचने और उसे अद्यतन कर सकते हैं? क्या मुझे बाद में कॉलबैक में हुक करना है और अलग-अलग विशेषता अपडेट कहां से अलग है? या इस दृष्टिकोण के लिए एक बेहतर तरीका है?

+0

मुझे यह जोड़ना चाहिए कि यह मेरे ऐप में वास्तव में क्या चल रहा है इसका एक सरल उदाहरण है। मुझे यकीन है कि मुझे अपनी स्थिति में कक्षा तालिका विरासत को लागू करने की आवश्यकता है, एकल तालिका विरासत सबसे अच्छा तरीका नहीं होगा। –

+0

मैंने अपने प्रश्न में संदर्भित ब्लॉग पर एक टिप्पणी डाली और लेखक ने कृपया ऐसा करने के लिए एक तरीका प्रदान किया: http://rhnh.net/2010/08/17/updating-class-table-inheritance- टेबल (आप रॉक जेवियर!) –

उत्तर

5

एकल तालिका विरासत का उपयोग क्यों नहीं करते? उदाहरण के लिए:

class Person < ActiveRecord::Base 
    # some common code here 
end 

class Driver < Person 
    # Driver code 
end 

class Passenger < Person 
    # Passenger code 
end 
इस तरह से आप एक सामान्य वर्ग व्यक्ति होगा में

, प्लस से यह

+13

नोट: ओपी ने क्लास टेबल विरासत का उपयोग करने के बारे में पूछा, एकल तालिका विरासत नहीं। –

+21

कभी-कभी लोग गलत प्रश्न पूछते हैं, मैंने अभी उनकी समस्या के संभावित समाधान का उत्तर दिया है। –

+9

फिर इसे एक टिप्पणी के रूप में सुझाव दिया जाना चाहिए। – EdMelo

4

मैं कक्षा मेज विरासत प्लगइन का उपयोग कर रहा है और यह अच्छी तरह से काम कर ली गई दो विशिष्ट वर्गों, http://github.com/brunofrank/class-table-inheritance

+0

टिप के लिए धन्यवाद, मैं प्लगइन की जांच करूंगा! –

+4

सबसे अच्छा समाधान नहीं है, पोस्टग्रेज़ के साथ ठीक काम नहीं कर रहा है (यानी, यदि आप पोस्टग्रेज़ के साथ हेरोकू का उपयोग करना चाहते हैं तो इसका उपयोग न करें) – standup75

2

मैंने हाल ही में रेल में एकाधिक टेबल विरासत और कक्षा विरासत को लागू करने के लिए एक आशाजनक परियोजना को फोर्क किया। मैंने इसे कुछ दिनों तक तेजी से विकास, फिक्सेस, टिप्पणी और दस्तावेज़ीकरण के अधीन बिताया है और इसे सीटियर (रेल विरासत और रेल विरासत एम्बेडिंग रेल के लिए) के रूप में फिर से जारी किया है।

मुझे लगता है कि आप इसे ऊपर दिए गए उत्तरों के साथ संभावित रूप से संयोजित कर सकते हैं?

यह एक नज़र देने पर विचार करें: http://peterhamilton.github.com/citier

मैं कक्षा-टेबल विरासत रेपो तरह समाधान को देखा है, लेकिन इस IMO अधिक स्वच्छ और अधिक तार्किक है।

यह मुख्य SQL भाषाओं SQLite, MySQL, PostgreSQL और शायद अधिक का समर्थन करता है लेकिन मैंने उनका परीक्षण नहीं किया है।

+0

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

+0

बहुत अच्छा काम करता है ... लेकिन हम heroku के साथ बहुत सारी समस्या में भाग गया। यह टेबल दृश्य पसंद नहीं आया, खासकर जब डीबी को धक्का/खींच रहा था। इसे हटा दिया समाप्त हो गया। – Ricky

7

इसके अलावा एक प्लगइन 'acts_as_relation' ऐसा करने के लिए,
https://github.com/hzamani/acts_as_relation/

अपने मामले में

है कोड यह होगा:

class Driver < ActiveRecord::Base 
    acts_as :person 
end 

class Passenger < ActiveRecord::Base 
    acts_as :person 
end 

को person_type और person_id स्तंभ जोड़ने के लिए मत भूलना persons तालिका।
अब ड्राइव और यात्री दोनों व्यक्ति गुण, सत्यापन और विधियों का उत्तराधिकारी हैं।

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