Ruby on Rails 5.2 - ActiveRecord::Inheritance

मॉड्यूल ActiveRecord :: वंशानुक्रम




ruby

मॉड्यूल ActiveRecord :: वंशानुक्रम

एकल तालिका वंशानुक्रम

सक्रिय रिकॉर्ड एक स्तंभ में वर्ग के नाम को संग्रहीत करके वंशानुक्रम की अनुमति देता है जिसे डिफ़ॉल्ट रूप से "प्रकार" नाम दिया गया है (इसे Base.inheritance_column द्वारा अधिलेखित किया जा सकता है)। इसका मतलब यह है कि एक विरासत इस तरह दिख रही है:

class Company < ActiveRecord::Base; end
class Firm < Company; end
class Client < Company; end
class PriorityClient < Client; end

जब आप Firm.create(name: "37signals") , तो यह रिकॉर्ड टाइप = "फ़र्म" के साथ कंपनियों की तालिका में सहेजा जाएगा। आप फिर Company.where(name: '37signals').first का उपयोग करके इस पंक्ति को फिर से Company.where(name: '37signals').first और यह एक फर्म ऑब्जेक्ट लौटाएगा।

ध्यान रखें कि क्योंकि टाइप कॉलम रिकॉर्ड पर एक विशेषता है, प्रत्येक नए उपवर्ग को तुरंत गंदा के रूप में चिह्नित किया जाएगा और टाइप कॉलम को रिकॉर्ड पर परिवर्तित विशेषताओं की सूची में शामिल किया जाएगा। यह नॉन सिंगल टेबल इनहेरिटेंस (एसटीआई) वर्गों से अलग है:

Company.new.changed? # => false
Firm.new.changed?    # => true
Firm.new.changes     # => {"type"=>["","Firm"]}

यदि आपके पास अपनी तालिका में एक प्रकार का स्तंभ नहीं है, तो एकल-तालिका वंशानुक्रम ट्रिगर नहीं होगा। उस स्थिति में, यह सामान्य उपवर्गों की तरह काम करेगा, जिसमें कोई विशेष जादू नहीं होगा, जो कि उनके बीच अंतर करने या खोजने के लिए सही प्रकार को फिर से लोड करने के लिए होगा।

ध्यान दें, सभी मामलों के लिए सभी विशेषताओं को एक ही तालिका में रखा गया है। और पढ़ें: www.martinfowler.com/eaaCatalog/singleTableInheritance.html

सार्वजनिक प्रवृत्ति के तरीके

initialize_dup (अन्य) शो स्रोत
# File activerecord/lib/active_record/inheritance.rb, line 259
def initialize_dup(other)
  super
  ensure_proper_type
end
सुपरक्लास विधि कहता है