सक्रिय रिकॉर्ड के साथ विरासत को कैसे कार्यान्वित करें?रेल पर रूबी में सक्रिय रिकॉर्ड विरासत को कैसे कार्यान्वित करें?
उदाहरण के लिए, मुझे एक वर्ग पशु, कक्षा कुत्ता, और कक्षा बिल्ली चाहिए।
मॉडल और डेटाबेस तालिका मानचित्रण कैसे होगा?
सक्रिय रिकॉर्ड के साथ विरासत को कैसे कार्यान्वित करें?रेल पर रूबी में सक्रिय रिकॉर्ड विरासत को कैसे कार्यान्वित करें?
उदाहरण के लिए, मुझे एक वर्ग पशु, कक्षा कुत्ता, और कक्षा बिल्ली चाहिए।
मॉडल और डेटाबेस तालिका मानचित्रण कैसे होगा?
रेल एकल तालिका विरासत का समर्थन करता है।
AR docs से:
सक्रिय रिकॉर्ड एक कॉलम में वर्ग के नाम संग्रहण कि द्वारा डिफ़ॉल्ट "प्रकार" नाम दिया गया है द्वारा विरासत की अनुमति देता है (बदला जा सकता है Base.inheritance_column अधिलेखन के द्वारा) । यह मतलब यह है कि इस तरह की तलाश में एक विरासत:
class Company < ActiveRecord::Base; end class Firm < Company; end class Client < Company; end class PriorityClient < Client; end
आप Firm.create करते हैं (: नाम => "37signals"), इस रिकॉर्ड प्रकार = "फर्म के साथ कंपनियों तालिका में सहेजा जाएगा "। फिर आप कंपनी का उपयोग कर इस पंक्ति को फिर से प्राप्त कर सकते हैं। (पहले, "नाम = '37signals')) और यह एक फर्म ऑब्जेक्ट लौटाएगा।
यदि आपके पास अपनी तालिका में परिभाषित प्रकार नहीं है, तो एकल-तालिका विरासत ट्रिगर नहीं की जाएगी। उस मामले में, यह सामान्य सबक्लास के समान काम करेगा, जिसमें के लिए कोई विशेष जादू नहीं है या के बीच सही प्रकार को फिर से लोड करना होगा।
एक बहुत अच्छी ट्यूटोरियल यहाँ है: http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/
मॉडल:
class Animal < ActiveRecord::Base; end
class Dog < Animal; end
class Cat < Animal; end
प्रवासन:।
class CreateAnimals < ActiveRecord::Migration
def self.up
create_table :animals do |t|
# Other attributes...
t.string :type
end
end
def self.down
drop_table :animals
end
end
ActiveRecord एक एकल तालिका करने के लिए मानचित्रण विरासत पदानुक्रम का समर्थन करता है (Single-table inheritance टेबल होगा एक कॉलम type
है जो एक का नाम संग्रहीत करता है ctual वर्ग और अन्य वर्ग-विशिष्ट कॉलम का चयन करने के लिए प्रयोग किया जाता है।
मल्टी-टेबल विरासत मानचित्रण को लागू करना संभव है, जैसा कि here दिखाया गया है, लेकिन यह विशेष तरीका पोर्टेबल नहीं है, AFAIK।
आप एक उत्तर स्वीकार करना चाहते हैं –