मैंने Datamapper सीखना शुरू किया और मुझे इसके बारे में क्या पसंद आया कि मैं अपने मॉडल को वास्तविक विरासत के साथ लिख सकता हूं।संगठनों के साथ रूबी डाटामैपर टेबल विरासत
अब मुझे आश्चर्य है, अगर यह संभव हो सकता है इस बारे में और अधिक उन्नत होने के लिए:
class Event
include DataMapper::Resource
property :id, Serial
property :begin, DateTime
property :type, Discriminator
end
class Talk<Event
property :title, String
belongs_to :meeting
end
class Meeting<Event
has n, :talks
end
कि कोड Talk
और स्पष्ट रूप से के लिए :title
स्तंभ बनाने के लिए विफल रहता है, discriminator स्तंभ यहाँ कम मूल्य की है, क्योंकि डेटाबेस दृश्य से, Talk
और Meeting
दोनों के लिए अलग-अलग टेबल होना चाहिए।
तो, अंत में, मैं Talk
और Meeting
रूप Event
में लेकिन संभव अतिरिक्त गुणों के साथ और एक 0..1 के साथ परिभाषित एक ही गुण साझा करना चाहते हैं: n संबंध (एक बैठक कई वार्ता हो सकता है लेकिन वहाँ वार्ता कर रहे हैं बिना किसी बैठक के।) क्या कॉलम परिभाषाओं को दोहराए बिना/या विरासत छोड़ने के बिना इसे पूरा करने का कोई तरीका है?
संपादित
एक और उदाहरण देने के लिए: भाग मुझे पसंद है कि के बारे में विरासत बात यह है कि आम Event
रों अलग से पूछे जा सकता है। इसलिए, जब मैं जानना चाहता हूं, अगर किसी निश्चित :begin
दिनांक पर कुछ है, तो मुझे दो या दो से अधिक टेबल देखने की आवश्यकता नहीं है, लेकिन केवल Event
तालिका से पूछताछ की जा सकती है। एक तरह से, निम्नलिखित संरचना मेरी जरूरतों को पूरा कर सकती है।
class Event
include DataMapper::Resource
property :id, Serial
property :begin, DateTime
end
class Talk
include DataMapper::Resource
property :id, Serial
property :title, String
belongs_to :event
belongs_to :meeting
end
class Meeting
include DataMapper::Resource
property :id, Serial
belongs_to :event
has n, :talks
end
हालांकि, ताकि इस का उपयोग करने के, मैं मैन्युअल रूप से एक Event
हर बार बनाने के लिए, की आवश्यकता होगी मैं बनाने या किसी Talk
संपादित करना चाहते हैं। यही है, मैं talk.begin
या Talk.create(:begin => Time.now)
नहीं कर सकता। क्या सभी कार्यों को पैच किए बिना और गुणों को विलय किए बिना इसके आसपास कोई रास्ता है? मॉडल का उपयोग करते समय मैं अंतर्निहित संरचना की याद दिलाना नहीं चाहता हूं।
वास्तविक विरासत से आप किस प्रकार की विरासत का मतलब रखते हैं- एकल तालिका विरासत, कक्षा तालिका विरासत, या कंक्रीट तालिका विरासत? http://martinfowler.com/eaaCatalog/ – MattMcKnight
मेरा मतलब रूबी वर्ग विरासत है। – Debilski
जो कुछ भी इसका मतलब है टेबल-वार, मुझे इस पर बहुत अधिक परवाह नहीं है - जब तक मैं प्रत्येक रूबी मॉडल को अलग से उपयोग कर सकता हूं और उप-वर्ग से पैरेंट और बैक को असाइन कर सकता हूं। – Debilski