मैं एक बुक और डाउनलोड मॉडल का हिस्सा है कि कई गुण है, इसलिए मेरा लक्ष्य एक DownloadableResource मॉडल से सामान्य विशेषताएं वारिस है।
STI पर एक नज़र था, लेकिन मैं abstract base model class रास्ता बजाय चला गया:कार्यान्वयन सार बेस मॉडल क्लास, रेल मार्ग ™
मॉडल:
class DownloadableResource < ActiveRecord::Base self.abstract_class = true attr_accessible :title, :url, :description, :active, :position validates :title, :url, :description, presence: true scope :active, where(active: true).order(:position) end class Book < DownloadableResource attr_accessible :cover_url, :authors validates :cover_url, :authors, presence: true end class Download < DownloadableResource attr_accessible :icon_url validates :icon_url, presence: true end
माइग्रेशन:
class CreateDownloadableResources < ActiveRecord::Migration def change create_table :downloadable_resources do |t| t.string :title t.string :url t.text :description t.boolean :active, default: false t.integer :position t.timestamps end end end class CreateBooks < ActiveRecord::Migration def change create_table :books do |t| t.string :cover_url t.string :authors t.timestamps end end end class CreateDownloads < ActiveRecord::Migration def change create_table :downloads do |t| t.string :icon_url t.timestamps end end end
माइग्रेशन के बाद, जब मैं एक नई किताब बनाएं परिणाम नतीजा है उम्मीद:
> Book.new
=> #<Book id: nil, cover_url: nil, authors: nil, created_at: nil, updated_at: nil>
किसी कैसे सार बेस मॉडल क्लास तकनीक लागू करने के लिए तो ActiveRecord मॉडल inheritance के माध्यम से आम कोड साझा कर सकते हैं अभी तक विभिन्न डेटाबेस तालिकाओं को कायम किया पर कुछ प्रकाश डाला कृपया कर सकते हैं?
एक तरीका विरासत की बजाय एक रचना है। कुछ उदाहरण: http://rails-bestpractices.com/posts/17-extract-into- मॉड्यूल – VadimAlekseev
एक साइड नोट के रूप में, भले ही आप दो समान रूप से संरचित तालिकाओं के साथ जाएं, आप कम से कम अपने माइग्रेशन DRY को सभी बनाकर रख सकते हैं केवल अपने अद्वितीय क्षेत्रों के साथ तालिकाओं और फिर '[: किताबें, डाउनलोड] जैसे कुछ कर रहे हैं। सभी करें | तालिका | change_table तालिका do | t | t.text: विवरण # ... अंत अंत ' – Janosch