2010-07-08 21 views
5

में "सिंगल टेबल विरासत" से बचें, मैं एक विरासत तालिका के साथ एकीकृत करने की कोशिश कर रहा हूं जिसमें "टाइप" नामक कॉलम है।रेल/एक्टिव रिकार्ड और लीगेसी स्कीमा

रेल "समझदारी से" मान लेंगे कि जब भी हमारे पास एक तालिका में 'प्रकार' कॉलम होता है, तो यह सिंगल टेबल विरासत का उपयोग करने का प्रयास करेगा।

क्या इससे बचने के लिए वैसे भी है?

(मैं कॉलम का नाम नहीं बदल सकता)।

उत्तर

11

वैसे, अधिकांश प्रकार यह वास्तव में स्मार्ट कॉन्फ़्रेंस पर कॉन्फ़िगरेशन के कुछ वास्तविक लाभ हैं। ;-)

कहाँ सम्मेलन अपने मामले में के रूप में काम नहीं करता है, वहाँ है - यह चारों ओर एक रास्ता (शायद कम से कम, मैं हमेशा एक अब तक मिल गया है ...)। विरासत स्कीमा के लिए कुछ संभावनाएं हैं जो तुरंत दिमाग में वसंत करती हैं।

  • अपने विरासत डेटाबेस में एकल-तालिका दृश्य बनाएं जो एआर के पारंपरिक नामों से बचने के लिए कॉलम को रीमेप करता है। यदि आपके पास डीबी पर निश्चित रूप से दृश्य अनुमतियां नहीं हैं, या यदि आपके डीबी के पास विचार नहीं हैं तो अधिक उपयोग नहीं करें;

class LegacyValue < ActiveRecord::Base 
    set_inheritance_column 'does_not_have_one' 
end 
+0

उपयोग set_inheritance_column: यह आपकी सबसे अच्छी शर्त है। –

2

set_inheritance_column का उपयोग कर एसटीआई संकेतक के रूप में :type के उपयोग ओवरराइड, इस प्रकार रेल में 4 set_inheritance_column बहिष्कृत है और self.inheritance_column बजाय इस्तेमाल किया जाना चाहिए:

class LegacyValue < ActiveRecord::Base 
    self.inheritance_column = 'does_not_have_one' 
end 
संबंधित मुद्दे